原生態jdbc程序中問題總結


原生態jdbc程序中問題總結

 

1.環境

java環境:jdk1.7.0_67

eclipseMars.2 

mysql5.5

 

2 在Mysql中創建用戶表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用戶名稱',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性別',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;


insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'張三','2014-07-10','1','北京市'),(16,'張小明',NULL,'1','河南鄭州'),(22,'陳小明',NULL,'1','河南鄭州'),(24,'張三丰',NULL,'1','河南鄭州'),(25,'陳小明',NULL,'1','河南鄭州'),(26,'王五',NULL,NULL,NULL);


 

3 jdbc程序

使用jdbc查詢Mysql數據庫中用戶表的記錄。

 

創建java工程,加入jar包:

 

數據庫驅動包:

 mysql-connector-java-5.1.40


 

 

程序代碼:

package com.ren.mybatis.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;




/**
 * @author 任志燕 
 * 2017年4月19日
 * 
 */
public class JDBCTest {

	public static void main(String[] args) {
		
		//數據庫連接
		Connection connection = null;
		//預編譯的Statement,使用預編譯的Statement提高數據庫性能(防止sql注入)
		PreparedStatement preparedStatement = null;
		//結果集
		ResultSet resultSet = null;
		
		try {
			//加載數據庫驅動
			Class.forName("com.mysql.jdbc.Driver");
			
			//通過驅動管理類獲取數據庫鏈接
			connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123456");
			//定義sql語句 ?表示佔位符
			String sql = "select * from user where username = ?";
			//獲取預處理statement
			preparedStatement = connection.prepareStatement(sql);
			//設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
			preparedStatement.setString(1, "張三");
			//向數據庫發出sql執行查詢,查詢出結果集
			resultSet =  preparedStatement.executeQuery();
			//遍歷查詢結果集
			while(resultSet.next()){
				System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//釋放資源
			if(resultSet!=null){
				try {
					resultSet.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(preparedStatement!=null){
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(connection!=null){
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}


	}
	

}



 

4.問題總結

 

1、數據庫連接,使用時就創建,不使用立即釋放,對數據庫進行頻繁連接開啓和關閉,造成數據庫資源浪費,影響 數據庫性能。(使用連接池)

 

2、將sql語句硬編碼java代碼中,如果sql語句修改,需要重新編譯java代碼,不利於系統維護。


 3、向preparedStatement中設置參數,對佔位符號位置和設置參數值,硬編碼在java代碼中,不利於系統維護。

 

4、從resultSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利於系統維護。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章