当前位置:网站首页 > Java基础 > 正文

java数据库基础笔记



   ----------------------------------
     按行读写文件(提高效率)

        
 1 public static void main(String[] args) {  2 BufferedReader bfr=null;  3 BufferedWriter bfw=null;  4  5  FileReader fileReader;  6 try {  7 fileReader = new FileReader("e:/wode.txt"); //读操作(作为 BufferedReader的构造参数)  8 bfr=new BufferedReader(fileReader); // 按行读操作  9 FileWriter fileWriter=new FileWriter("e:/我的.txt"); //写操作(作为BufferedWriter的构造参数) 10 bfw=new BufferedWriter(fileWriter); //按行写操作 11 String string=null; 12 while ((string=bfr.readLine())!=null) { //循环读每一行,读到末尾返回null 13  System.out.println(string); 14 bfw.write(string+" "); //按行写 15  } 16 } catch (Exception e) { 17  e.printStackTrace(); 18 }finally{ 19 try { 20  bfr.close(); 21  bfw.close(); 22 } catch (IOException e) { 23  e.printStackTrace(); 24  } 25 26 27  } 28 29 }
View Code
  

八、数据库
  (1)开发时数据库的选择条件:
    <1>成本
    <2>功能多少
    <3>并发性(最终用户多少)
    <4>安全性

  (2)基本查询
    <1> sal between 100 and 200 //表示 sal>=100 and sal<=200
    <2>like(模糊查询)
    %:表示0到多个模糊字符 _;表示单个模糊字符
    例如:1、查询姓李的人的名字
    select name from emp where name like '李%';
  2、查询名字的第二个字为明的人的名字
    select name from emp where name like '_明%';
  <3>查询条件是一个字段符合多个条件的时候,一般用in(批量查询)
    例如:查询员工的年龄是22,25,31岁的员工的姓名
      select name fron emp where age in(22,25,31);

  <4>判断字段内容为null时返回指定的信息用isnull()函数
      isnull(age,0); //这句话表示当age不为null时就返回实际的值,当为null时就返回0
  <5>使用 Oder by 进行排序
    order by age asc //默认升序
    order by age desc //降序排列

    例子:按照部门号升序,工资降序排列
      select * from emp order by dempno asc ,sal desc;

  <6> group by having
    having 是用来筛选group by 分组后的数据
      在选择列中如果有列、表达式、分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会出错!

  <7>经典案例
      --显示公司每个员工的名字和她的上级的名字
      //这里可以把emp表看成两张表,分别是worker、boss
        select java数据库基础笔记 worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno

  <8>分页查询
    //这里的num1指的是每一页显示的行数,num2指的是第几页
      select top num1 * from emp where empno not in (select top num1*num2 from emp);
  <8>*疯狂在一个表中插入数据
      insert into test(name,pass) select name,pass from test
    insert into test select name,pass from test
  <9>删除表中的重复记录
      select distinct * into #temp from testTable
      delete from tsetTable
      insert into tsetTable select * from #temp
      drop table #temp
      <unique>唯一约束,不能重复,可以为null
      <check>范围约束
      <default>默认值
      <foreign key>外键 用法:foreign key reference table2(id)

  (3)备份、恢复数据库
      备份:
        backup database 要备份的数据库名字 to disk='路径';
      恢复:
        restore database 数据库名 from disk='路径'

九、JDBC

  (1)演示使用JDBC-odbc桥接方式连接数据库cakesales
    <1>配置数据源(在控制面板→管理工具→odbc配置工具里面)
    <2>在程序中去连接数据源

*1、使用Statement的方式*
    *代码如下

            
 1 Connection con=null;  2 Statement sm=null;  3 ResultSet rSet=null;  4 try {  5 // 1、加载驱动(作用是把需要的驱动程序加入内存)  6 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  7 //2、得到连接  8 con=DriverManager.getConnection("jdbc:odbc:MySqlSever", "sa", "");  9 10 //3、创建Statement或者PreparedStatement[区别] 11 //Statement用处是:主要用于发送sql语句到数据库 12 sm=con.createStatement(); 13 14 //4、执行crud(增删改查) 15 16 //增加 17 //int i=sm.executeUpdate("insert into cakecategory values('小蛋糕',1)"); 18 19 //删除 20 //int i=sm.executeUpdate("delete from cakecategory where CGname='小蛋糕'"); 21 22 //更新 23 //int i=sm.executeUpdate("update cakecategory set CGname='蛋糕' where CGname='小蛋糕'"); 24 25 //System.out.println(i); 26 27 28 //查询表信息 29 rSet=sm.executeQuery("select * from cakecategory"); 30 while (rSet.next()) { 31 int id=rSet.getInt(1); 32 String name=rSet.getString(2); 33 int state=rSet.getInt(3); 34 System.out.println(id+" "+name+" "+state); 35  } 36 37 } catch (Exception e) { 38 // TODO Auto-generated catch block 39  e.printStackTrace(); 40 }finally{ 41 try { 42 if(rSet!=null) 43  rSet.close(); 44 if(sm!=null) 45  sm.close(); 46 if(con!=null) 47  con.close(); 48 } catch (SQLException e) { 49 // TODO Auto-generated catch block 50  e.printStackTrace(); 51 }
View Code

*1、使用PreparedStatement的方式*

    此方法有以下有点
      1>效率有所提高(因为对sql语句进行了预编译)
      2>防止sql注入

    *代码如下

          
 1 Connection connection=null;  2 PreparedStatement ps=null;  3 ResultSet rSet=null;  4  5 try {  6 //1、引入驱动  7 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  8 //2、创建连接  9 connection=DriverManager.getConnection("jdbc:odbc:MySqlSever", "sa", ""); 10 //3、创建PreparedStatement对象 11 ps=connection.prepareStatement("select * from cakecategory where CGname=?"); 12 ps.setString(1, "蛋糕"); 13 14 //4、获取结果集 15 rSet=ps.executeQuery(); 16 17 //5、循环读取 18 while (rSet.next()) { 19 int id=rSet.getInt(1); 20 String name=rSet.getString(2); 21 int state=rSet.getInt(3); 22 System.out.println(id+" "+name+" "+state); 23  } 24 } catch (Exception e) { 25 // TODO: handle exception 26  e.printStackTrace(); 27 }finally{ 28 try { 29 if(rSet!=null) 30  rSet.close(); 31 if(ps!=null) 32  ps.close(); 33 if(connection!=null) 34  connection.close(); 35 } catch (SQLException e) { 36 // TODO Auto-generated catch block 37  e.printStackTrace(); 38  } 39 }
View Code

(2)演示使用JDBC直接连接数据库cakesales
  1>不用配置数据源,直接代码连接
  2>此种方法需要引入外部的三个jar包,操作如下:
    选中项目 右键-> 选择属性->选择java构建路径->选择 库 ->选择添加 然后导入三个驱动文件即可(msbase.jar 、 mssqlserver.jar 、 msutil.jar)
  3>遇到几个典型的错误,如下
    1)java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
      这个原因是因为没有打开sqlserver的监听端口导致的,解决方法如下:
        *选中计算机右键—>管理—>服务和应用程序—>sql server管理器—>sql server 网络配置—>MSSQLSERVER协议—>TCP/IP—>IP 地址 就可以看见了
    2)java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'cakecategory' 无效。
        这是由于SQLSERVER帐号的默认数据库导致的。如果使用的库不是当前帐号的默认库的话,就会找不到表
        解决方法:一、把帐号的默认数据库改为要查询的库
                  修改方法:打开数据库,在左侧菜单栏->安全性->登录名->sa 右键 属性 找到下面的默认数据库修改成要用的就行了
             二、在执行查询前先执行“use xxx”语句
        *推荐使用第二种解决方法!


*实例代码如下

             
 1 Connection con=null;  2 PreparedStatement ps=null;  3 ResultSet rSet=null;  4  5  6 try {  7 //1、引入驱动  8 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  9 //2、创建连接 10 con=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;database=CakeSales","sa",""); 11 12 //3、创建preparedStatement对象 13 ps=con.prepareStatement("use CakeSales select * from cakecategory"); 14 //ps.setString(1, "蛋糕"); 15 16 //4、接收结果集 17 rSet=ps.executeQuery(); 18 //5、循环读取数据 19 while (rSet.next()) { 20 int id=rSet.getInt("CGid"); 21 String name=rSet.getString(2); 22 int state=rSet.getInt(3); 23 System.out.println(id+" "+name+" "+state); 24  } 25 } catch (Exception e) { 26 // TODO Auto-generated catch block 27  e.printStackTrace(); 28 }finally{ 29 try { 30 if(rSet!=null) 31  rSet.close(); 32 if(ps!=null) 33  ps.close(); 34 if(con!=null) 35  con.close(); 36 } catch (SQLException e) { 37 // TODO Auto-generated catch block 38  e.printStackTrace(); 39  } 40 }
View Code

(3)演示使用JDBC直接连接数据库进行ddl操作(也就是新建,删除,备份,恢复数据库)

实例代码如下

            
 1 Connection con=null;  2 PreparedStatement ps=null;  3 try {  4 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  5 //不指定数据库连接  6 //con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;", "sa", "");  7 con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=xinjiande", "sa", "");  8  9 //新建数据库 10 //ps=con.prepareStatement("create database xinjiande"); 11 12 //新建表 13 //ps=con.prepareStatement("use xinjiande create table users(uid int primary key identity(1,1))"); 14 15 16 //删除表 17 //ps=con.prepareStatement("use xinjiande drop table users"); 18 19 //删除数据库 20 ps=con.prepareStatement("drop database xinjiande"); 21 22 //备份数据库 23 24 //ps=con.prepareStatement("backup database xinjiande to disk='e:/xinjiande.bak'"); 25 26 //恢复数据库 27 //ps=con.prepareStatement("restore database xinjiande from disk='e:/xinjiande.bak'"); 28 29 if(!ps.execute()){ 30 System.out.println("ok"); 31  } 32 } catch (Exception e) { 33 // TODO: handle exception 34  e.printStackTrace(); 35 }finally{ 36 try { 37 if(ps!=null){ 38  ps.close(); 39  } 40 if(con!=null){ 41  con.close(); 42  } 43 } catch (SQLException e) { 44 // TODO Auto-generated catch block 45  e.printStackTrace(); 46  } 47 }
View Code

十、java中的可变参数
关键字:...(没错,就是三个点。好像C语言中也是三个点)
例子:下面是我下的连接数据库的可变参数

      
 1 public sqlHelper(String sql,String ...strings){  2 try {  3 this.sql=sql;  4 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  5 con=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=javaTset", "sa", "");  6 ps=con.prepareStatement(sql);  7 if(strings!=null){  8 int i=1;  9 for(String s:strings){ 10  ps.setString(i, s); 11 i++; 12  } 13  } 14 } catch (Exception e) { 15 // TODO: handle exception 16  e.printStackTrace(); 17  } 18 }
View Code

c#中的可变参数用的是parameter关键字

十一、java网络编程

和C#中的网络编程Socket差不多

1>服务器端代码及过程如下: 先建立ServerSocket监听->然后等待客户端连接->之后读取客户端发来的消息或者向客户端发送消息

      
 1 try {  2 //开始监听  3 ServerSocket ss=new ServerSocket(9999);  4 //等待客户端连接  5 Socket socket=ss.accept();  6  7 //读取客户端发来的消息  8 BufferedReader bfr=new BufferedReader(new InputStreamReader(socket.getInputStream()));  9 10 //向客户端发消息 11 PrintWriter pWriter=new PrintWriter(socket.getOutputStream(),true); 12 13 Scanner scanner=new Scanner(System.in); 14 while (true) { 15 16 String string=bfr.readLine();//读取消息 17  System.out.println(string); 18 19 20 String s=scanner.next();//接收控制台输入 21 pWriter.println(s);//发送消息 22 23 24  } 25 26 } catch (IOException e) { 27 // TODO Auto-generated catch block 28  e.printStackTrace(); 29 }
View Code

  2>客户端代码及过程如下: 先连接服务器->之后读取服务器发来的消息或者向服务器发送消息

      
 1 try {  2 Socket socket=new Socket("127.0.0.1", 9999);//连接服务器  3  4 //发送消息  5 PrintWriter pWriter=new PrintWriter(socket.getOutputStream(),true);  6 //读取客户端发来的消息  7 BufferedReader bReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));  8  9 Scanner scanner=new Scanner(System.in); 10 while (true) { 11 //发送消息 12 String s=scanner.next(); 13  pWriter.println(s); 14 15 16 //读取消息 17 String string=bReader.readLine(); 18  System.out.println(string); 19 20  } 21 22 } catch (Exception e) { 23 // TODO Auto-generated catch block 24  e.printStackTrace(); 25 }
View Code

  3>*对象流传输例子如下,发送用的是ObjectOutputStream,接收用的是ObjectInputStream

*注意:对象必须要继承Serializable序列化接口*

    
 1 public class conSK {  2 public static Socket sk;  3  ObjectOutputStream oop;  4 public conSK(){  5 System.out.println("gr");  6 try {  7 sk=new Socket("127.0.0.1", 9999);  8  9 } catch (Exception e) { 10 // TODO Auto-generated catch block 11  e.printStackTrace(); 12  } 13  } 14 15 / 16  * 向服务器发送数据 17  * @param object 18 */ 19 public void sendMsg(Object object){ 20 try { 21 oop=new ObjectOutputStream(sk.getOutputStream()); 22  oop.writeObject(object); 23 //System.out.println(((User)object).getPwd()); 24 } catch (IOException e) { 25 // TODO Auto-generated catch block 26  e.printStackTrace(); 27  } 28  } 29 30 31 / 32  * 接收服务器发过来的消息 33  * @return 返回Object类型 34 */ 35 public Object getMsg(){ 36 Object object =null; 37 try { 38 ObjectInputStream oop=new ObjectInputStream(sk.getInputStream()); 39 object=oop.readObject(); 40 } catch (Exception e) { 41 // TODO Auto-generated catch block 42  e.printStackTrace(); 43  } 44 return object; 45  } 46 }
View Code

版权声明


相关文章:

  • 传智杯java基础题2024-11-01 09:58:03
  • java大数据0基础难学吗2024-11-01 09:58:03
  • java基础迷你计算器2024-11-01 09:58:03
  • java程序设计与基础2024-11-01 09:58:03
  • java基础类源码包2024-11-01 09:58:03
  • java基础语句结构2024-11-01 09:58:03
  • Java基础工作经验2024-11-01 09:58:03
  • java基于什么基础2024-11-01 09:58:03
  • 无it基础学java2024-11-01 09:58:03
  • 大连北大青鸟0基础学java2024-11-01 09:58:03