数据库编程02

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){
    				
    			}
    		}
     

   

猜你喜欢

转载自java-jill.iteye.com/blog/1501617