原生態jdbc程序中問題總結



原生態jdbc程序中問題總結  


 

1.環境

香港彩票透码 www.kptln.icu java環境:jdk1.7.0_67

eclipse:Mars.2 

mysql:5.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中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利于系統維護。

來源:itnose

上一篇: Linux從解壓安裝JDK開始

下一篇: 淺談JDBC

分享到: 更多
后三组选包胆豹子为什么不中奖 七乐彩中奖规则图解 keno100 幸运飞艇万能五码 ac米兰 网上电子游戏输钱 广东时时11选五计划软件下载 七星彩开奖视频播放今晚 七星彩前四位秘密公式 斗牛棋牌游戏 安徽时时快3开奖 天天计划软件手机版式 押龙虎技巧 重庆时时彩五星走势 内蒙古时时规则介绍 海南七星彩7000組直码