Android stuido 访问数据库的两种方式

发布于 2020-05-05  768 次阅读


背景

PC端的方案呢,也是用这样两种方案去访问的数据库,但是考虑到数据安全性,还是把Android和PC端的访问方式都定为了http访问PHP提交数据,然后在服务器端进行SQL指令的执行,再返回到PHP执行结果。

方法1:JDBC 连接

com.yy.eye.lib.DB.MySqlSetting mySqlSetting=mDBUtil.queryFirstOrDefault();
    String url_1="jdbc:mysql://127.0.0.1:3306/dbName";
    String UserName_1="root";
    String pass_1="password";
try {
    Class.forName("com.mysql.jdbc.Driver");
    java.sql.Connection cn= DriverManager.getConnection(url_1,UserName_1,pass_1);
    String sql = "" ;#SQL语句
    Statement st=(Statement)cn.createStatement();
    result=st.execute(sql);
    result=true;
    cn.close();
    st.close();
} catch (ClassNotFoundException e) {
    result=false;
  //  e.printStackTrace();
} catch (SQLException e) {
    //e.printStackTrace();
    result=false;
}

方法2:PHP访问

 try {
                    URL url = new URL("");#url地址包含sql语句
                    connection = (HttpURLConnection) url.openConnection();
                    //设置请求方法
                    connection.setRequestMethod("GET");
                    //设置连接超时时间(毫秒)
                    connection.setConnectTimeout(5000);
                    //设置读取超时时间(毫秒)
                    connection.setReadTimeout(5000);

                    //返回输入流
                    InputStream in = connection.getInputStream();

                    //读取输入流
                    reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder result = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        result.append(line);
                    }
                    show(result.toString());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (ProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (reader != null) {
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (connection != null) {//关闭连接
                        connection.disconnect();
                    }
                }

注意点:

无论是两种方式的任何一种,都需要访问网络,所以需要用到网络权限,需要提前在AndroidManifest.xml 中,添加

<uses-permission android:name="android.permission.INTERNET"/>

注意点2:

两种方式在JAVA中使用都需要在线程中运行,否则会出现app直接崩溃的现象。

new Thread(new Runnable() {
            @Override
            public void run() {
     flag1= MySqlHelp.InsertSql(bc,lR,rR,dt);
                    Message msg = Message.obtain();
                    msg.what = 0;
                    Handler.sendMessage(msg);
            }
        }).start();

注意点3:

子线程中无法更新软件的UI界面,这点很重要,Toast提示框或者是其他的UI操作。都需要通过handle进行信息传递

private Handler Handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0 ) {
                Toast.makeText(ViewTest.this, "提交成功", Toast.LENGTH_SHORT).show();
                InitEye();
            }
        }
    };

注意点4:

如果通过jdbc的连接方式,需要用到mysql-connector-java-5.0.8-bin.jar,【下载地址】


绝对不是恋爱脑!