Android 使用JDBC连接数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lkyphoon/article/details/54407095

在大多数Android项目中,数据的读取和保存都是通过调用服务器的接口来实现的,所以对于本地数据库的操作是很少的。但是,在前段时间的项目中,客户提出了要直接连接服务器上的数据库来操作数据,这对于一个Android小白来说还从没遇到过,于是开始了各种搜索,各种尝试,毕竟客户就是上帝,你懂的.........终于,在经过不断的尝试以后,终于成功连上了数据库。现在就来聊一聊吧。


JDBC(JAVA DATEBASE CONNECTIVITY):是使用java存取数据库系统的标准解决方案,它将不同数据库间各自差异API与标准SQL语句分开看待,实现了数据库无关的java操作。

(就是说我们只需要专注jdbc API提供的接口和类以及标准的SQL语句,并且能够运用,而不需要了解底层数据库驱动程序与相关的操作接口的差异)


运用JDBC访问数据库一共分为七个步骤:

1,加载JDBC驱动程序

2,提供链接参数(数据库地址,用户名和密码)

3,建立一个数据库连接(创建一个Connection对象)

4,创建一个Statement

5,执行SQL语句

6,处理结果

7,关闭JDBC对象

(其中有四个关键类:DriverManager,Connection,Statement,ResultSet,可通过API具体了解其使用方法)


首先你需要下载一个jdbc.jar的jar包。然后将jar包导入到自己的项目中,如图:

        


然后我们写一个服务来连接数据库,代码如下:

public class My_service_mysql extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
Log.e("驱动加载失败", e1.toString());
}


try {

//IP为服务器ip,DBNAME为数据库名字,DBUSER为数据库用户名,DBPASS为数据库密码
Connection connection = DriverManager.getConnection("jdbc:mysql://"+IP+":3306/"+DBNAME,DBUSER,DBPASS);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
Log.e("数据库连接失败", e1.toString());
}

            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        stopSelf();
    }

}

在数据库连接成功之后,我们就需要进行数据库操作了,需要使用sql语句。

首先是查询:

//sql语句

String sql = "select  tableName where colum = " + value;

                        Statement stmt = (Statement) connection.createStatement();
                         ResultSet rs = stmt.executeQuery(sql);
                        while (rs.next()) {
                            String id = rs.getString("colum");
                        }

                        stmt.close();

通过createStatement得到Statement对象,然后通过Statement的executeQuery方法得到ResultSet对象,就是查询的结果。然后取出你需要的字段。查询完之后关闭资源。

然后是插入和更新操作:

String sql= "insert into tableName values (value,valuevaluevalue)”;

                        Statement stmt = (Statement) connection.createStatement();
                        ResultSet rs = stmt.executeQuery(sql);
                        stmt.executeUpdate(sql);
                        stmt.close();

在存储过程中可能会遇到文件的存储,也就是数据库中BLOB类型的数据,存储方式如下:

PreparedStatement pstmt = null;
                            File file = new File(path);
                            InputStream photoStream = new FileInputStream(file);
                            String sql = "INSERT INTO tableName VALUES (?)"; //问号表示数据类型为BLOB的字段插入的值
                            pstmt = (PreparedStatement) LKF_static.connection.prepareStatement(sql);
                            pstmt.setBinaryStream(1, photoStream, (int) file.length());
                            pstmt.executeUpdate();
                            pstmt.close();

在编程的过程中需要注意几点:

1,加载驱动和连接数据库的操作一定要放在线程中,不然会报错

2,在进行数据库操作之后需要关闭资源,如果资源关闭了就不能进行数据库操作了

3,就是需要注意打开需要的权限

<!-- 网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 从SDCard读取数据权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

网上也有人说要使用JDBC连接数据库需要注意API版本,要是API版本高于17则不能成功连接,所以我用的API版本是16大笑








猜你喜欢

转载自blog.csdn.net/Lkyphoon/article/details/54407095