jdbc 无法在 android 中处理 asynctask

Posted

技术标签:

【中文标题】jdbc 无法在 android 中处理 asynctask【英文标题】:jdbc not working on asynstask on android 【发布时间】:2014-04-14 17:34:48 【问题描述】:
public class ViewData extends Activity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_data);
    AccessDBTask db=new AccessDBTask();
    db.execute(new String[]"");


@Override
public boolean onCreateOptionsMenu(Menu menu) 

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.view_data, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in androidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) 
        return true;
    
    return super.onOptionsItemSelected(item);



 private class AccessDBTask extends AsyncTask<String, Void, List<String>> 

     List<String> myData1 ; 


    @Override
    protected List<String> doInBackground(String... params) 
         String driverClassName="org.postgresql.Driver";  
           String url="jdbc:postgresql://url:port/dbname";
           Connection dbConnect=null;
           Statement statement=null;
           ResultSet result;
        //code for jdbc
         myData1 = new ArrayList<String>(); 
        try
         Class.forName (driverClassName).newInstance();
         dbConnect = DriverManager.getConnection (url, "username", "password");
         statement = dbConnect.createStatement();

         DatabaseMetaData databaseMetaData = dbConnect.getMetaData();
    String[] types  =  "TABLE" ;
    result = databaseMetaData.getTables("%","username", "%", types );
    while(result.next()) 
          //int  counter++;
            String tableName = result.getString(3);
            myData1.add(tableName);

       
         statement.close();
         dbConnect.close();
        catch(Exception ex)

        


        return myData1;
    
  @Override
  protected void onPostExecute(List<String> myData12)
      if(myData1.isEmpty())
          Toast.makeText(ViewData.this,"ERROR", Toast.LENGTH_SHORT).show();
      
      ArrayAdapter adapter = new ArrayAdapter<String>(ViewData.this,R.layout.activity_listview, myData1);

              ListView listView = (ListView) findViewById(R.id.country_list);
              listView.setAdapter(adapter);
  

//类AccessDBTask

你好!我的问题是 doInBackground 执行但 ArrayList 和结果集是空的。 这是我用来获取数据库表名的代码,我使用 Intent 从 MainActivity 调用 ViewData。但是当我运行它时相同的代码,因为 MainActivity 运行完美。日志控制台中没有错误

【问题讨论】:

【参考方案1】:

Android 本身不支持jdbc,您需要创建web service 才能在数据库中获取和插入数据。你可以找到任何好的教程来制作 web 服务。

简单的 Web 服务可以是返回 JSON 或 xml 的网页,您可以在 Android 应用程序中对其进行解析以获取数据。

或者你可以查看this

【讨论】:

对不起,我没有提到我在我的项目中导入了 jdbc 库。我问这个的原因是如果我运行与 MainActivity 相同的代码而不调用 ViewData 它运行完美。

以上是关于jdbc 无法在 android 中处理 asynctask的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio [JDBC]:为啥我无法访问数据库

s3fs 和 fsspec 版本的工作组合是啥? ImportError:无法从“fsspec.asyn”导入名称“maybe_sync”

无法使用 JDBC 在 android 中连接到 sql server 2008

Android 无法直接连接 Postgres 数据库,也无法使用 JDBC 连接

我无法使用带有 Android Studio 的 JDBC 连接到 SQL Server Express

无法为 android 构建 berkeleyDB jdbc 驱动程序