JavaWeb数据库之JDBC链接

这些年一直在做移动方面的开发,发现原来做Web时那些个种种都忘光光了,呵呵,不能忘本,从今天开始把之前学到的一些东西总结总结,从最基础的JDBC开始吧,尽管JDBC几乎应该时不会有人用了,不过既然时基础,自然有其道理,很多框架,比如hibernate其实也就是在其上套了一层而已。


1.准备数据库,看来看去还是mySQL顺眼,什么Oracel太大,用的地方也不多,大部分企业mySQL足够了

mySQL如今已经给oracle收购了!我是多久没关注web了,罪过!

https://dev.mysql.com/downloads/mysql/

霹雳啪啦一顿装,搞定它


2.建一个简单的数据库(mysql有一个自动的cmd工具可以用,除非是远程操作,本地直接用就行了)

mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mytestdb           |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)



然后又是霹雳啪啦

mysql> use mytestdb
Database changed
mysql> create table user(id int not null primary key, name char(20));
Query OK, 0 rows affected (0.05 sec)

mysql> show tables
    -> ;
+--------------------+
| Tables_in_mytestdb |
+--------------------+
| t_user             |
| user               |
+--------------------+
2 rows in set (0.00 sec)



差不多就这么建好了,有一个要注意的地方,sql语句是要以;结束的,我给老忘了这事

3. 准备Java这边吧
首先需要一个mysql和java连接的jar包
C:\Program Files (x86)\MySQL\Connector.J 5.1 这个目录下就能找到,不用去网上下了,若没有,可以自带的什么conector再下一个

JavaWeb数据库之JDBC链接
然后buidpath一下,把它加到依赖库里面

JavaWeb数据库之JDBC链接
然后建两个类,把DBhelper.java放到db package下

package com.nullpointsun.app.db;

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

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class DBHelper {

	/*
	 * SQL数据库的地址,这里后面是可以跟很多参数的 建议有空还是看一下官网,可能有些参数有用
	 ** https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-
	 * configuration-properties.html
	 */
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/mytestdb";

	// 用户名密码
	private static final String USR = "root";
	private static final String PASW = "root";

	public static Connection conn;
	public static DBHelper dbHelper;

	// 连接数据库
	private DBHelper() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = (Connection) DriverManager.getConnection(URL, USR, PASW);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("DB connect successful!");
	}

	public synchronized static DBHelper getInstance() {
		if (dbHelper == null) {
			dbHelper = new DBHelper();
		}
		return dbHelper;
	}

	// 断开数据库
	public void closeDB() {
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	//直接丢SQL语句到这里就可以了, update是更新执行
	//executeUpdate(String sql)会返回一个int值,这个值是执行语句描述会影响哪些行,若-1表示执行失败
	public int executeUpdateSQL(String sql) {
		if (conn != null) {
			try {
				Statement sm =  (Statement) conn.createStatement();
				return sm.executeUpdate(sql);
			} catch (SQLException e) {
				e.printStackTrace();
				return -2;
			}
		} else {
			System.out.println("connection is null!");
			return -2;
		}
	}
	
	//查询语句
	public ResultSet executeQuerySQL(String sql) {
		if (conn != null) {
			try {
				Statement sm =  (Statement) conn.createStatement();
				return sm.executeQuery(sql);
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}
		} else {
			System.out.println("connection is null!");
			return null;
		}
	}

}
package com.nullpointsun.app;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.nullpointsun.app.db.DBHelper;

public class Main {
	
	public static void main(String[] args) {
		DBHelper db = DBHelper.getInstance();
		ResultSet rs = null;
		
		//删除限制表里面所有的记录
		String delete = "delete from user where 1=1";
		db.executeUpdateSQL(delete);
		
		//插入5条记录
		String sql_insrt1 = "insert into user values (1, 'jeff')";
		String sql_insrt2 = "insert into user values (2, 'nullpointer')";
		String sql_insrt3 = "insert into user values (3, 'jasky')";
		String sql_insrt4 = "insert into user values (4, 'Tom')";
		String sql_insrt5 = "insert into user values (5, 'Jarry')";
		db.executeUpdateSQL(sql_insrt1);
		db.executeUpdateSQL(sql_insrt2);
		db.executeUpdateSQL(sql_insrt3);
		db.executeUpdateSQL(sql_insrt4);
		db.executeUpdateSQL(sql_insrt5);
		
		//查询一下现况
		String sql_query = "select * from user";
		rs = db.executeQuerySQL(sql_query);
		try {
			while (rs.next()) {
				System.out.println("id=" + rs.getInt(1) + ", name=" + rs.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		System.out.println("********************************************");
		
		//更新表
		String sql_update = "update user set name='HelloKity' where id=4";
		db.executeUpdateSQL(sql_update);
		
		//删除一条记录
		String sql_detele_2 = "delete from user where name=\"nullpointer\"";
		db.executeUpdateSQL(sql_detele_2);
		
		//再查一下
		rs = db.executeQuerySQL(sql_query);
		try {
			while (rs.next()) {
				System.out.println("id=" + rs.getInt(1) + ", name=" + rs.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}

}



基本用就这么用后面看到再总结更新这篇文章吧

用JDBC呢,其实还是用SQL语句和数据库打交道,每句话都能看的很清楚,就是显得不OO了,特别是若对象一堆子属性的时候,估计sql语句拼起来是非常费劲的事情,想象一下字符串和变量的拼接吧,各种“”和+,里面还得各种转义字符,后期维护是个头大的事情啊,所以人家发明hibernate也不是没事撑着的,哈哈!

P.S.
关于mysql里面声明主键非空自增长,老是记不住,废话不用能记住个鬼,懒的查留一个
id int auto_increment not null primary key

相关推荐