Day2
1.命令行界面可输入以下命令:(加分号结束开始执行)
- Use 数据库名称(转换使用什么数据库)
- DESC(显示表有多少属性,约束等信息)
- show tables、show databases(显示有什么数据库以及数据库有什么表等)
- net stop/start mysql(关闭和开启数据库服务);
2.ResaultSet接口(查询操作)
- executeQuery()返回的类型;
Connection conn = null ; // 数据库连接 java.sql.Statement stm=null; java.sql.ResultSet rs=null; Class.forName(DBDRIVER) ; // 加载驱动程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; // String sql="insert into person " + // "(name,gender,age,position)values('jill','女',23,'worker')"; String sql="select * from person;"; stm=conn.createStatement(); rs=stm.executeQuery(sql); while(rs.next()){ int id=rs.getInt(1); String name=rs.getString(2); String gender=rs.getString(3); int age=rs.getInt(4); String position=rs.getString(5); System.out.print(id+"\t"); System.out.print(name+"\t"); System.out.print(gender+"\t"); System.out.print(age+"\t"); System.out.println(position+"\t"); System.out.println("----------------------------------------"); } rs.close(); stm.close(); conn.close() ; // 数据库关闭
SQL语句搜索可以按列数来返回对应列搜索到的结果,这样避免可以打过长的列名;
3.PerpareStatement接口(这也是广泛使用的一个接口,而不用Statement)
perparedStatement是为了方便用户在修改数据的时候对插入数据做预处理,例如:插入为例子,插入的时候已经指向下一条,但是数据还没确定,交由用户指定好变量之后再插入,这样就能达到一个可以再插入数据前进行修改的功能。而一般会用通配符来指代预处理的数据,注意的是要一一对应通配符个数;
Connection conn = null ; // 数据库连接 PreparedStatement pstm=null; String name="张文濠"; String gender="男"; int age=23; String position="engineer"; String birthday="1989-07-04"; java.util.Date birtemp=null; birtemp=new SimpleDateFormat("yyyy-mm-dd").parse(birthday); Date bir=new Date(birtemp.getTime()); String sql="insert into person " + "(name,gender,age,position,birthday)values(?,?,?,?,?)"; Class.forName(DBDRIVER) ; // 加载驱动程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; pstm=conn.prepareStatement(sql); pstm.setString(1, name); pstm.setString(2, gender); pstm.setInt(3, age); pstm.setString(4, position); pstm.setDate(5, bir); pstm.executeUpdate(); pstm.close(); conn.close() ; // 数据库关闭
这个是查询操作的代码:
Connection conn = null ; // 数据库连接 PreparedStatement pstm=null; java.sql.ResultSet rs=null; String sql="select * from person " ; Class.forName(DBDRIVER) ; // 加载驱动程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; pstm=conn.prepareStatement(sql); rs=pstm.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getInt(4)+"\t" +rs.getString(5)+"\t"+rs.getDate(6)); } rs.close(); pstm.close(); conn.close() ; // 数据库关闭
4.对于Data类型数据的处理
对于上面代码的处理是做了一个比较清晰的Data转换操作,首先在JAVA中,我们用一个JAVA.UTIL.DATA的类型的中间变量来装一个字符串!这个字符串便是日期,然后用JAVA.SQL.DATA类型来转换这个日期中间量,就能传入到SQL语句中,也就是通过SimpleDateFormat("yyyymmdd")来对字符的规范;
String birthday="19900104"; java.util.Date birtemp=null; birtemp=new SimpleDateFormat("yyyy-mm-dd").parse(birthday); Date bir=new Date(birtemp.getTime());
5. clob和blob读取大文件(海量文字的书目或者图片视频等)
数据库里:大文本用longText,图片用longblob;
(IO流操作问题)一般不会把大文件直接存储在数据库中,而是用一种路径硬射的方法。
6.对于事务处理的理解:
一般来说,事务具有四个特性
- 原子性(事务的最小单位,相当于一个小的数据库操作,全部组合起来就成为一个事务,所以一个原子若失败,则整个事务无效)
- 一致性(维持有效性,即正确就改变,而错误就要保持原来状态)
- 隔离性(相对于多个事务而言,彼此间不会影响,结果是当操作完才能看见)
- 持久性(发现正确而提交的数据是无法回滚的,有错则会自动回滚)
一般来说都是相对于批处理而做事务的相应处理;
Connection conn = null ; // 数据库连接 Statement stmt = null ; // 定义数据库操作 Class.forName(DBDRIVER) ; // 加载驱动程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; conn.setAutoCommit(false) ; // 取消掉自动提交 stmt = conn.createStatement() ; stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)" + " VALUES ('LXH-1','hello-1',11,'男','1975-03-05') ") ; stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)" + " VALUES ('LXH-2','hello-2',12,'女','1976-03-05') ") ; // 加入“'”之后,此SQL语法就出现了错误,所以,肯定执行到此语句的时候出现代码错误 stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)" + " VALUES ('LXH-'3','hello-3',13,'男','1977-06-01') ") ; stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)" + " VALUES ('LXH-4','hello-4',14,'女','1965-03-05') ") ; stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)" + " VALUES ('LXH-5','hello-5',15,'女','1965-08-05') ") ; try{ int temp[] = stmt.executeBatch() ; System.out.println("更新了:" + temp.length+ "条数据。") ; conn.commit() ; // 所有的操作成功了 }catch(Exception e){ try{ conn.rollback() ; }catch(Exception e1){ } }