一.前言

android连接数据库的方式有两种,第一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。第二种方式是android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。

二.准备工作

1.加载外部jar包

在Android工程中要使用jdbc的话,要导入jdbc的外部jar包,因为在Java的jdk中并没有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,网络上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的时候发现不兼容,所以下载了比较新版本的,jar包可以去官网下载,也可以去百度,有很多前人们上传的。

2.导入jar包的方式

方式一:

可以在项目的build.gradle文件中直接添加如下语句导入

compile files('libs/mysql-connector-java-5.1.18-bin.jar')

方式二:下载jar包复制到项目的libs目录下,然后右键复制过来的jar包Add as libs

三.建立数据库连接

protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_jdbc);    new Thread(runnable).start();}Handler myHandler=new Handler(){    public void handleMessage(Message msg) {        // TODO Auto-generated method stub        super.handleMessage(msg);        Bundle data=new Bundle();        data=msg.getData();        //System.out.println("id:"+data.get("id").toString());    //输出第n行,列名为“id”的值        Log.e("TAG","id:"+data.get("id").toString());       TextView tv= (TextView) findViewById(R.id.jdbc);        //System.out.println("content:"+data.get("content").toString());    }};Runnable runnable=new Runnable() {    private Connection con = null;    @Override    public void run() {        // TODO Auto-generated method stub        try {            Class.forName("com.mysql.jdbc.Driver");            //引用代码此处需要修改,address为数据IP,Port为端口号,DBName为数据名称,UserName为数据库登录账户,Password为数据库登录密码            con =                    //DriverManager.getConnection("jdbc:mysql://192.168.1.202:3306/b2b", "root", "");            DriverManager.getConnection("jdbc:mysql://http://192.168.1.100/phpmyadmin/index.php:8086/b2b",                    UserName,Password);        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            testConnection(con);    //测试数据库连接        } catch (java.sql.SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public void testConnection(Connection con1) throws java.sql.SQLException {        try {            String sql = "select * from ecs_users";        //查询表名为“oner_alarm”的所有内容            Statement stmt = con1.createStatement();        //创建Statement            ResultSet rs = stmt.executeQuery(sql);          //ResultSet类似Cursor            //ResultSet最初指向第一行            Bundle bundle=new Bundle();            while (rs.next()) {                bundle.clear();                bundle.putString("id",rs.getString("userid"));                //bundle.putString("content",rs.getString("content"));                Message msg=new Message();                msg.setData(bundle);                myHandler.sendMessage(msg);            }            rs.close();            stmt.close();        } catch (SQLException e) {        } finally {            if (con1 != null)                try {                    con1.close();                } catch (SQLException e) {}        }    }};

注意:

在Android4.0之后,不允许在主线程中进行比较耗时的操作(连接数据库就属于比较耗时的操作),需要开一个新的线程来处理这种耗时的操作,没新线程时,一直就是程序直接退出,开了一个新线程处理直接,就没问题了。

当然,连接数据库是需要网络的,千万别忘了添加访问网络权限:

四.bug点

1.导入的jar包一定要正确

2.连接数据库一定要开启新线程

3.数据库的IP一定要是可以ping通的,局域网地址手机是访问不了的

4.数据库所在的服务器是否开了防火墙,阻止了访问

更多相关文章

  1. Android通过共享Uid实现两个应用间的数据库资源共享
  2. android的内存管理方式
  3. Android图文混排实现方式详解
  4. Android数据库ORMlite框架翻译系列(第一章)
  5. Android Activity的setTitle,AlertDialog,Toast操作是否都必须在

随机推荐

  1. android实现多线程
  2. android apk安装结束的系统广播的监听
  3. Using Intent in an Android(安卓)applic
  4. android之实现各个组件点击事件监听
  5. androi 添加桌面快捷方式
  6. Android特色开发--情景模式
  7. Android(安卓)CTS Test
  8. Android再按一次退出软件
  9. Android(安卓)Dialog设置动画
  10. Android蓝牙通信代码