
前言
以連接配接
SQL Server
的網絡資料庫為例,
常用的一共有兩種方式:
1.在Android工程中引入JDBC驅動,直接連接配接;
2.通過WebService等方法的間接連接配接。
采用JDBC方法主要問題是安全性不高,而且一旦要通路的資料量過多,容易出問題。
另外,Android系統本身有對json或者xml直接解析的api,是以建議采用第二種方法,實用性與安全性都提高了。
正文
1 直接連接配接方式
1.1 使用jtds方法
1.1.1 導入jtds相關依賴,具體可操作如下:
首先,需要下載下傳jdts最新的Jar包
https://sourceforge.net/projects/jtds/。
然後,在工程目錄下,把
jtds
的
jar
包拷貝到
libs
檔案夾。
編譯項目。對lib進行引用。
最後,編輯測試代碼,運作測試。
1.1.2 用jdts連接配接sql server資料庫有兩種方式:
第一種就是指定使用者和密碼;第二種就是windows系統賬戶。
兩種連接配接有什麼不同呢?url不同,然後就是第二種不需要使用者名和密碼。
兩種url如下例:
第一種:url="jdbc:jtds:sqlserver://192.168.1.1;database=Assess";
第二種:url="jdbc:jtds:sqlserver://192.168.1.1;database=Assess;integratedSecurity=true";
然後的代碼就差不多了:
Class.forName(DRIVER);
conn=DriverManager.getConnection(url,user_name, password);//第一種
conn=DriverManager.getConnection(url);//第二種
System.out.println("connect success!");
1.1.3 一個簡單的Android通過jdbc直接連接配接mysql資料庫的小例子
1.1.3.1 Android 連接配接MySQL資料庫
public class DBOpenHelper {
//MySQL 驅動 根據使用的驅動自行調整使用
//private static String driver = "com.mysql.jdbc.Driver";
private static String driver = "net.sourceforge.jtds.jdbc.Driver";
//MYSQL資料庫連接配接Url,此處需要注意根據使用的驅動不同,連接配接url的方式也會有所差别,本文使用的驅動為JTDS
//private static String url = "jdbc:mysql://IP:端口号/資料庫";
private static String url = "jdbc:jtds:sqlserver://IP:端口号;instanceName=SQLEXPRESS;databaseName=資料庫名";
private static String user = "使用者名";//使用者名
private static String password = "密碼";//密碼
/**
* 連接配接資料庫
* */
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driver);//擷取MYSQL驅動
conn = (Connection) DriverManager.getConnection(url, user, password);//擷取連接配接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 關閉資料庫
* */
public static void closeAll(Connection conn, PreparedStatement ps){
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 關閉資料庫
* */
public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs){
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1.1.3.2 增删改查
public class DBService {
private Connection conn=null; //打開資料庫對象
private PreparedStatement ps=null;//操作整合sql語句的對象
private ResultSet rs=null;//查詢結果的集合
//DBService 對象
public static DBService dbService=null;
/**
* 構造方法 私有化
* */
private DBService(){
}
/**
* 擷取MySQL資料庫單例類對象
* */
public static DBService getDbService(){
if(dbService==null){
dbService=new DBService();
}
return dbService;
}
/**
* 擷取User資訊 例句---查
* */
public List<User> getUserData(){
//結果存放集合
List<User> list=new ArrayList<User>();
//MySQL 語句
String sql="select * from user";
//擷取連結資料庫對象
conn= DBOpenHelper.getConn();
try {
if(conn!=null&&(!conn.isClosed())){
ps= (PreparedStatement) conn.prepareStatement(sql);
if(ps!=null){
rs= ps.executeQuery();
if(rs!=null){
while(rs.next()){
User u=new User();
u.setId(rs.getString("id"));
u.setName(rs.getString("name"));
u.setPhone(rs.getString("phone"));
u.setContent(rs.getString("content"));
u.setState(rs.getString("state"));
list.add(u);
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
DBOpenHelper.closeAll(conn,ps,rs);//關閉相關操作
return list;
}
/**
* 修改資料庫中某個對象的狀态 例句---改
* */
public int updateUserData(String phone){
int result=-1;
if(!StringUtils.isEmpty(phone)){
//擷取連結資料庫對象
conn= DBOpenHelper.getConn();
//MySQL 語句
String sql="update user set state=? where phone=?";
try {
boolean closed=conn.isClosed();
if(conn!=null&&(!closed)){
ps= (PreparedStatement) conn.prepareStatement(sql);
ps.setString(1,"1");//第一個參數state 一定要和上面SQL語句字段順序一緻
ps.setString(2,phone);//第二個參數 phone 一定要和上面SQL語句字段順序一緻
result=ps.executeUpdate();//傳回1 執行成功
}
} catch (SQLException e) {
e.printStackTrace();
}
}
DBOpenHelper.closeAll(conn,ps);//關閉相關操作
return result;
}
/**
* 批量向資料庫插入資料 例句---增
* */
public int insertUserData(List<User> list){
int result=-1;
if((list!=null)&&(list.size()>0)){
//擷取連結資料庫對象
conn= DBOpenHelper.getConn();
//MySQL 語句
String sql="INSERT INTO user (name,phone,content,state) VALUES (?,?,?,?)";
try {
boolean closed=conn.isClosed();
if((conn!=null)&&(!closed)){
for(User user:list){
ps= (PreparedStatement) conn.prepareStatement(sql);
String name=user.getName();
String phone=user.getPhone();
String content=user.getContent();
String state=user.getState();
ps.setString(1,name);//第一個參數 name 規則同上
ps.setString(2,phone);//第二個參數 phone 規則同上
ps.setString(3,content);//第三個參數 content 規則同上
ps.setString(4,state);//第四個參數 state 規則同上
result=ps.executeUpdate();//傳回1 執行成功
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
DBOpenHelper.closeAll(conn,ps);//關閉相關操作
return result;
}
/**
* 删除資料 例句---删
* */
public int delUserData(String phone){
int result=-1;
if((!StringUtils.isEmpty(phone))&&(PhoneNumberUtils.isMobileNumber(phone))){
//擷取連結資料庫對象
conn= DBOpenHelper.getConn();
//MySQL 語句
String sql="delete from user where phone=?";
try {
boolean closed=conn.isClosed();
if((conn!=null)&&(!closed)){
ps= (PreparedStatement) conn.prepareStatement(sql);
ps.setString(1, phone);
result=ps.executeUpdate();//傳回1 執行成功
}
} catch (SQLException e) {
e.printStackTrace();
}
}
DBOpenHelper.closeAll(conn,ps);//關閉相關操作
return result;
}
}
2 通過WebService方式進行連接配接
通過實作WebService端相關功能,向外部提供相關API方法,使用JSON或者XML資料協定進行通訊,基本操作,具體細節不作贅述