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再下一个
然后buidpath一下,把它加到依赖库里面
然后建两个类,把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