- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我学习了一些教程,但它们都非常简单,无法在我的解决方案中使用。
我通过 JDBC MySQL 连接到数据库。
public class ConnCore extends AsyncTask<Void, Void, Boolean> {
Activity activity;
Context context;
public ConnCore(Context context, Activity currActivity) {
this.context = context.getApplicationContext();
this.activity = currActivity;
}
@Override
protected Boolean doInBackground(Void... params) {
try{Class.forName("com.mysql.jdbc.Driver");}
catch(Exception e){
DataStore.DataStoreClass.connExc = e;
return false;}
try{
DataStore.DataStoreClass.mysqlConn = DriverManager.getConnection(DataStore.DataStoreClass.connectionString);
return true;
}catch(Exception e){
DataStore.DataStoreClass.connExc = e;
return false;
}
}
@Override
protected void onPostExecute (Boolean b) {
if(b == true) {
Intent intent = new Intent(context, DBList.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle("Error");
alertDialog.setMessage(DataStore.DataStoreClass.connExc.toString());
alertDialog.show();
}
}
这将与这个字符串相关联:
static String connectionString = "jdbc:mysql://XXX.XXX.XXX.XXX:3306?user=root&password=test&autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
如果连接成功,它会启动新的 Activity DBList,它会启动新的 AsyncTask 来获取数据库。AsyncTask 看起来像这样:
public class GetDBList extends AsyncTask<Void, Void, Boolean> {
Activity activity;
Context context;
public GetDBList(Context context, Activity activity){
this.activity = activity;
this.context = context;
}
@Override
protected Boolean doInBackground(Void... params){
Statement stmt = null;
String query = "SHOW DATABASES";
DataStore.DataStoreClass.DBResponse = new ArrayList<String>();
try {
DatabaseMetaData meta = DataStore.DataStoreClass.mysqlConn.getMetaData();
ResultSet res = meta.getCatalogs();
while (res.next()) {
DataStore.DataStoreClass.DBResponse.add(res.getString("TABLE_CAT"));
}
res.close();
return true;
}
catch (SQLException e){
AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle("Error");
alertDialog.setMessage(e.toString());
alertDialog.show();
return false;
}
}
@Override
protected void onPostExecute(Boolean b){
if(b) {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, DataStore.DataStoreClass.DBResponse){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(android.R.id.text1);
text.setTextColor(Color.BLACK);
return view;
}
};
ListView lv = (ListView) activity.findViewById(R.id.db_lv);
lv.setAdapter(arrayAdapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
DataStore.DataStoreClass.currentDB = ((TextView) view).getText().toString();
Toast.makeText(context, DataStore.DataStoreClass.currentDB,
Toast.LENGTH_SHORT).show();
AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle("Error");
alertDialog.setMessage(DataStore.DataStoreClass.connExc.toString());
alertDialog.show();
}
});
}
}
}
到目前为止,一切正常,我可以获取带有数据库的 ListView。
现在。每个 List_Item 都有 onClickListener。如何将字符串值(包含数据库名称)传递到现有连接以获取其表?
每个教程都已经带有数据库名称。我正在尝试创建一个通用数据库客户端,因此您实际上不知道服务器上有哪些数据库。
String url = "jdbc:mysql://" + serverName + "/" + schema;
而且我不想关闭以前的连接并直接与数据库建立一个新连接
那么有没有可能“编辑”
(static Connection mysqlConn;)
DataStore.DataStoreClass.mysqlConn = DriverManager.getConnection(DataStore.DataStoreClass.connectionString);
不知何故......或任何其他方式?
谢谢。
最佳答案
如果我没有理解你的意思,你想连接到数据库,但是你事先并不知道数据库名称。正确的?
如果以上为真,那么您无需提供数据库名称即可连接到数据库。只需向 DriverManager
提供主机名和端口,如下所示:
String url="jdbc:mysql://{hostname}:{port}"
Connection conn = DriverManager.getConnection(url, username, password);
现在您有了一个有效的连接
,您需要找出那里有哪些数据库。你已经知道了,但是,无论如何我都会提供一个例子,这样我就涵盖了所有内容。使用上面的 java.sql.Connection
对象创建一个 java.sql.Statement
,如下所示:
Statement stmt = conn.createStatement();
String SQL = "SHOW DATABASES";
运行上面的SQL
语句得到数据库名称列表如下:
ResultSet rs = stmt.executeQuery(SQL);
遍历返回的数据库名称列表,并将重要的添加到列表中,跳过系统和其他内部数据库。见下文:
List<String> dbNames = new ArrayList<String>();
while (rs.next()) {
// Retrieve by column name
String name = rs.getString("Database");
if(!name.equals("information_schema") && !name.equals("mysql") && !name.equals("performance_schema") && !name.equals("sys")) {
dbNames.add(name);
}
}
假设我的数据库中只有db1
、db2
和db3
,那么打印时列表将包含以下内容
[db1, db2, db3]
现在我想检索上述每个数据库的表列表。我在db1数据库中手动创建了表t1和t2
,在db2数据库中创建了x1和x2
数据库,在db3数据库中创建了z1和z2
数据库,看看我是怎么做的迭代器以以下不同方式遍历数据库表:
方法 1:您可以使用 setCatalog(String dbname) java.sql.Connection
类的方法,以便将数据库名称设置为 Connection
对象。这类似于 USE {dbname}
sql 命令。看下面的例子
for(int i = 0; i < dbNames.size(); i++) {
//here I am setting the dbname in connection obj
conn.setCatalog(dbNames.get(i));
//then I am creating a new Statement
stmt = conn.createStatement();
sql = "SHOW TABLES";
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString(1)
+ " is a table in " + dbNames.get(i) + " database.");
}
}
方法 2: 在这种方法中,您可以通过更改 java.sql.Connection
类的 setCatalog(String dbname)
方法来避免使用SQL命令如下:
sql = "SHOW TABLES FROM " + dbNames.get(i);
这两种方法都应该为您提供相同的输出,如下所示:
[db1, db2, db3]
t1 is a table in db1 database.
t2 is a table in db1 database.
x1 is a table in db2 database.
x2 is a table in db2 database.
z1 is a table in db3 database.
z2 is a table in db3 database.
关于java - Android JDBC MySQL 通过数据库获取表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087940/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!