1. 程式人生 > >JavaSE__原始的JDBC連線資料庫,查詢結果集 (基礎篇)

JavaSE__原始的JDBC連線資料庫,查詢結果集 (基礎篇)

展示原生的JDBC連線資料庫,以及存在的問題。

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

public class Test {
	public static void main(String[] args) {
		Connection connection = null;
		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();
				}
			}
		}
	}
}


程式的目錄結構


sql指令碼

資料庫名mybatis

/*
SQLyog v10.2 
MySQL - 5.1.72-community : Database - mybatis
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]
@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; /*Table structure for table `items` */ CREATE TABLE `items` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL COMMENT '商品名稱', `price` float(10,1) NOT NULL COMMENT '商品定價', `detail` text COMMENT '商品描述', `pic` varchar(64) DEFAULT NULL COMMENT '商品圖片', `createtime` datetime NOT NULL COMMENT '生產日期', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Table structure for table `orderdetail` */ CREATE TABLE `orderdetail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `orders_id` int(11) NOT NULL COMMENT '訂單id', `items_id` int(11) NOT NULL COMMENT '商品id', `items_num` int(11) DEFAULT NULL COMMENT '商品購買數量', PRIMARY KEY (`id`), KEY `FK_orderdetail_1` (`orders_id`), KEY `FK_orderdetail_2` (`items_id`), CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; /*Table structure for table `orders` */ CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '下單使用者id', `number` varchar(32) NOT NULL COMMENT '訂單號', `createtime` datetime NOT NULL COMMENT '建立訂單時間', `note` varchar(100) DEFAULT NULL COMMENT '備註', PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; /*Table structure for table `user` */ 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; /*!40101 SET
[email protected]
_SQL_MODE */; /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; /*!40014 SET [email protected]_UNIQUE_CHECKS */; /*!40111 SET [email protected]_SQL_NOTES */;

插入資料指令碼
/*
SQLyog v10.2 
MySQL - 5.1.72-community : Database - mybatis
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
/*Data for the table `items` */

insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'桌上型電腦',3000.0,'該電腦質量非常好!!!!',NULL,'2015-02-03 13:22:53'),(2,'筆記本',6000.0,'筆記本效能好,質量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'揹包',200.0,'名牌揹包,容量大質量好!!!!',NULL,'2015-02-06 13:23:02');

/*Data for the table `orderdetail` */

insert  into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3);

/*Data for the table `orders` */

insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL);

/*Data for the table `user` */

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);

/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40111 SET [email protected]_SQL_NOTES */;

執行截圖


 jdbc問題總結如下:

1、資料庫連線,使用時就建立,不使用立即釋放,對資料庫進行頻繁連線開啟和關閉,造成資料庫資源浪費,影響 資料庫效能。

設想:使用資料庫連線池管理資料庫連線。

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

設想:將sql語句配置在xml配置檔案中,即使sql變化,不需要對java程式碼進行重新編譯。

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

設想:將sql語句及佔位符號和引數全部配置在xml中。

4、從resutSet中遍歷結果集資料時,存在硬編碼,將獲取表的欄位進行硬編碼,,不利於系統維護。

設想:將查詢的結果集,自動對映成java物件。


一個封裝之後的jdbc

相關推薦

JavaSE__原始JDBC連線資料庫,查詢結果 基礎

展示原生的JDBC連線資料庫,以及存在的問題。 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql

原始jdbc連線資料庫的程式碼

//此連線是針對於mysql的連線 public class MybatisJdbcConnection {     public static void main(String[] args){         Connection conn = null;       

資料庫】MySQL奇淫技巧基礎

前言:由於mysql有很多很多“特殊的用法”,在此成其為奇淫技巧,很多用法很冷門,雖然由常用命令拼起來的,但是不是十分常用。對待一些特殊需求查資料都不太描述,這是個很尬的問題,所以在此梳理用到的所有奇淫技巧,當然有新的特殊需求,可以交流學習進一步完善,有任何非議都可以交流。下面是

SQL Server 非聚集索引的覆蓋,連線,交叉和過濾 第二

在SQL Server中,非聚集索引其實可以看做是一個含有聚集索引的表,但相對實際的表來說,非聚集索引中所儲存的表的列數要少得多,一般就是索引列,聚集鍵(或RID)。非聚集索引僅僅包含源表中的非聚集索引的列和指向實際物理表的指標。 一、非聚集索引之INCLUDE   非聚集索引其實可以看做一

史上最簡單MySQL教程詳解基礎之多表聯合查詢

常用術語 內連線 外連線 左外連線 右外連線 注意事項: 自連線 子查詢 在上篇文章史上最簡單MySQL教程詳解(基礎篇)之資料庫設計正規化及應用舉例我們介紹過,在關係型資料庫中,我們通常為了減少資料的冗餘量將對資料表進行規範,將

資料庫系統概論——第一章基礎

資料庫系統概論——第一章  緒論     最近複習一下資料庫,參考書籍《資料庫系統概論》,以下純屬是個人筆記:1、資料庫系統概述  1.1 資料、資料庫、資料庫管理系統、資料庫系統    1.1.1 資

2019年一線大廠春招:Spring面試題和答案合

開發十年,就只剩下這套架構體系了! >>>   

jdbc連線資料庫查詢條件為漢字,查詢結果解決辦法

問題描述: select * from student where name='張三' 在資料庫中輸入該查詢語句時,有結果集。 用jdbc連線資料庫,在Java程式中執行時查詢不到結果集。 解決方法: 該問題為編碼問題,需要進行引數轉碼,在連線中新增:useUnicode

sql中連線多個結果查詢符合要求的欄位

1.sql中將查詢到的結果集作為一個表去連線多個結果集查詢想要的欄位,適用於查詢複雜邏輯的欄位; 舉例: select dd.base_grade_value,count(distinct dd.userid) from  (select cc.school_id,bb.us

jdbc連線資料庫,並查詢,呼叫儲存方法

package SQL; import java.awt.event.ActionEvent; import java.sql.CallableStatement; import java.sql.DriverManager; import java.sql.Prepared

sql語句查詢資料庫結果為json資料以供前端、後臺使用

分析: 查詢結果轉換成json需要經過兩個步驟,首先將查詢結果轉成XML資料,然後通過XML資料轉成json。程式碼如下,程式碼部分來源於網路。 一、將查詢結果轉成XML資料 //其中@PSQL 為要查詢的語句,@XML XML格式資料,@XMLStr

JDBC連線資料庫查詢

/* JDBC工作過程: 1.載入驅動,建立連線(載入驅動是靠DriverManager,並且通過DriverManager獲取連線Connection) 2.建立語句物件(通過Connection建立Statement用於執行sql語句) 3.執行SQL語句 4.處理結

JDBC連線資料庫之從結果集中獲取物件3

測試利用反射返回List物件的資料。 public <T> List<T> getForList(Class<T> clazz, String sql, Object... args) { List<T> l

使用JDBC連線資料庫遇到的問題,以及查詢到的解決方法

JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開

Java之JDBC查詢結果封裝到物件

工程目錄結構如下:User類:package com.xiao.pojo; /** * @author 笑笑 * @Date 2018年3月15日上午9:20:28 * */ publi

JDBC連線資料庫查詢的步驟

簡單的應用例子 先匯入jar包 程式碼:   import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLExcept

php中mysqli 處理查詢結果的幾個方法

數值 集中 style 索引 php bsp 枚舉 tab object 最近對php查詢mysql處理結果集的幾個方法不太明白的地方查閱了資料,在此整理記下 Php使用mysqli_result類處理結果集有以下幾種方法 fetch_all() 抓取所有的結果行並且

遍歷查詢結果,update數據

cas code view sed closed clas alt upd begin 1 set rowcount 0 2 select NULL mykey, * into #mytemp from dbo.DIM_DISTRIBUTOR 3 4 s

使用resultMap定義查詢結果,實現關聯查詢

操作 測試 nal spa void ltm 介紹 規則 print 接下來介紹resultMap定義查詢結果集,實現關聯查詢 1 首先在接口中定義操作的方法 public interface EmployeeMapperPlus { public Employee get

SELECT查詢結果INSERT到數據表

華盛頓 sel fff tro address 存在 插入 提取 語句 簡介 將查詢語句查詢的結果集作為數據插入到數據表中。 一、通過INSERT SELECT語句形式向表中添加數據 例如,創建一張新表AddressList來存儲班級學生的通訊錄信息,然後這些信息恰好存