当幸福莱敲门

导航

 

SQL语言:

数据定义语言:create,drop,alter等语句

数据操作语言:insert,update,delete等语句

数据查询语言:select

数据控制语言:grant,revoke,commit,rollback等语句

常用数据库语句

 1 --创建数据库
 2 create database Testdate
 3 --------------我是分割线-----------
 4 --创建表
 5 create table Hore       --创建的表名
 6 (heroId int ,           --英雄排名
 7 heroName varchar(50),   --名字
 8 heroNickName varchar(50),--外号
 9 sex char(2),              --性别
10 sal int)                 --工资
11 
12 
13 --------------我是分割线-----------
14 --删除表的方法
15 drop table Testdate  --前面是命令,后面加上表名
16 
17 --------------我是分割线-----------
18 
19 use Testdate --使用某个数据库
20 go --执行的意思
21 
22 
23 --------------我是分割线-----------
24 --添加数据语句
25 --使用sql语句来添加数据
26 insert into Hore values(1,'小明','霸王明','',10)
27 insert into hore values(1,'小红','霸王红','',100)
28 insert into Hore values(1,'小方','霸王方','',1000)
29 insert into Hore values(1,'小强','霸王强','',1500)
30 
31 
32 --------------我是分割线-----------
33 --使用语句来查询数据
34 select * from Hore
35 
36 --------------我是分割线-----------
37 --查询语句
38 --按条件来查询表
39 
40 select * from Hore where sal<1000
41 
42 --------------我是分割线-----------
43 --更新语句
44 --把工资低于1000的人的工资提高10%
45 --语法结构 update 表名 set 字段名=改的值 where 条件语句
46 update Hore set sal=sal*1.1 where sal<1000
47 
48 --------------我是分割线-----------
49 --删除语句
50 delete from Hore where sex=''

字符型:

注意:如果一个字段的字符确定,字段类型必须为char类型

带有汉字的段用nvarchar 类型

数据型:

小数推荐用 numeric

日期用:datetime

insert into spname values(getdate())

getdate() 获取当前时间到毫秒级

图片型 :Image

视频型:binary

 

主键:主要是保证同一类型的数据不会有重要的数据 ,主键必须给值,主键不充许为空null;

1 --给部份字段加入数据
2 
3  clerk是表名,
4 insert into clerk (cleId,cleName) values(3,'小明')

取消重复行(distinct)只能消除完全一样的行,保留一行

like 表示模糊查询

 1 select ename 姓名,sal 工资 from emp where ename like'小%' --like模糊查询的方法 
 2 
 3 select * from emp where comm is null
 4 
 5 select ename from emp where comm is null --数据为空值的查询
 6 
 7 select ename empno from emp where ename in('小红','小强') --in的用法
 8 
 9 select empno,ename,job,sal from emp order by sal desc --降排查询
10 
11 select * from emp order by sal asc --升序查询
 1 --数据分组函数
 2 --数据分组 max,min,avg,sum统计总数,count统计个数
 3 --查找最小的数
 4 select min(sal) from emp
 5 --查找最小的数
 6 select ename,sal from emp where sal=(select min(sal) from emp)
 7 --查询最大的数
 8 select max(sal) from emp
 9 
10 --平均公资和总工资
11 select avg(sal)"平均工资",sum(sal)"总工资" from emp
12 
13 --计算共有多少员工
14 select count(*)"数量" from emp
15 
16 --高于平均工资的员工
17 select * from emp where sal>(select avg(sal)from emp)
18 --显示每个部门的平均工资
19 select avg(sal),deptno from emp group by deptno

往表里自增数据的方法,删除表里面重复的数据,注意的是:添加了主键的表是没有重复数据存在的

--identity(1,1),表示该testId字段自增,从1,每次+1
--新建一张表
create table test(
testId int primary key identity(1,1),
testName varchar(30),
testPass varchar(30)
)
--往表里添加一条数据
insert into test (testName,testPass) values('名字','密码')
select * from test
--重复连续往表里添加数据
insert into test (testName,testPass) select testName,testPass from test

--查询表里有多少条记录
select count(*) 记录数 from test
--*星号表示查询表里的所有信息,这样会让查询速度变慢,所以能少用*号查询就少用

select * from test where testName='名字'
select testName from test  --建议用这种类型的查询方法

--下面是分页查询的方法
--排除前面99个数据只要中间的6个
select top 6 testId 测试ID,testName 测试名字,testPass 测试密码 from test where testId not in
(select top 99999 testId from test)

--删除表里重复的记录的方法
--新建一张测试表
create table cat(
catId int,
catName varchar(40)
)

--添加数据

insert into cat values(1,'aa')
insert into cat values(2,'bb')
insert into cat values(3,'cc')

--查看记录

select * from cat 

--查看总共有多少条记录
select count(*) 记录数 from cat
-----以下是删除cat表重复记录的方法,就是新建一张临时表,把筛选好数氟放入临时表,把原表数据清空,把临时表里的数据放到原表中,删除临时表

--把cat的记录distict后的结果,放入#temp3
select distinct * into #temp3 from cat
--把cat表的记录清空
delete from cat
--把#temp表数据(没有重复的记录),插入到cat表
insert into cat select * from #temp3
--删除#temp表
drop table #temp3
 1 --约束
 2 --not null(非空)就是不充许为空
 3 create table test1(
 4 test1Id int primary key identity(1,1),
 5 testName varchar(30) not null,
 6 testPass varchar(30) not null,
 7 testAge int
 8 )
 9 
10 --unique,--唯一的意思就是不能插入重复值 最多只能有一个空值
11 create table test2(
12 test1Id int primary key identity(1,1),
13 testName varchar(30) unique,--唯一的意思就是不能插入重复值
14 testPass varchar(30) not null,
15 testAge int
16 )
17 
18 --主键 primary key 该列不能为空还不能出现重复值,一张表只能有一个主键
19 --表可以有复合主键
20 --下面是复合组键案例
21 create table test3(
22 testId int ,
23 testName varchar(30) ,
24 testPass varchar(30) ,
25 testAge int 
26 )
27 --foreign key 外键 主要用于定义主表和从表的约束
28 
29 insert into test2(testName,testPass,testAge) values('姓名','密码',5)
30 
31 select * from test1
32 
33 select count(*) from test1
34 
35 --check 强制行数据必须满足条件才可以录入,否则就会报错
36 create table test4(
37 testId int ,
38 testName varchar(30) ,
39 testPass varchar(30) ,
40 testAge int check (testAge>=0 and testAge<=150)  --比如人的年龄就应该有限制,不可能大于2000岁吧
41 )
42 insert into test4(testId,testName,testPass,testAge) values (1,'小方','jj',100)
43 
44 --default 的使用 意思就是你给值就按你给的值添加,不给值就按默认的值添加
45 
46 create table mes
47 (mesId int primary key identity(1,1),--设置为主键并自行增加
48 mescon varchar(2000) not null,
49 mesDate datetime default getdate()
50 )
51 --查看表
52 select * from mes
53 --添加数据
54 insert into mes (mescon) values ('你好我是JAVA')

 数据库的删除,备份,还原命令的操作

 1 --如何备份数据库
 2 --语句
 3 backup database 你要备份的数据库我 to disk='备份的路径'
 4 backup database pdTest to disk='d:/today.bak'
 5 
 6 --删除数据库
 7 drop database pdTest
 8 
 9 --恢复数据库
10 --语句
11 restore database 你的数据库名 from disk='备份文件的路径'
12 restore database pdTest from disk='d:/today.bak'

 以下是通过JDBC-ODBC连接数据库的方法,但是会报错,因为JDK原生的1.7版本后就关闭了这个驱动,所以还是用JAVA纯JDBC的方式连接数据库

 1 /**
 2  * 演示使用jdbc-odbc桥连方式操作数据库的方法
 3  * 1.在我的电脑控制面板-管理工具-数据源ODBC配制电脑与服务器的连接
 4  * 2.在程序中去连接数据库
 5  */
 6 package com.test4;
 7 import java.sql.*;
 8 public class Test1 {
 9     public static void main(String[] args) {
10         Connection ct=null;
11         Statement sm=null;
12         try {
13             //1.加载驱动(作用是把需要的驱动程序加入内存中)
14             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
15             //2.得到连接(指定连接到哪个数据源,用户名,密码)
16             //如果配制的时候选择的是windows nt验证则不需要用户名和密码
17             //Connection ct=DriverManager.getConnection("jdbc:odbc:myliuTest")
18             //因为我们选择的是用帐号和密码验证,所以需要用户名和密码
19              //ct=DriverManager.getConnection("jdbc:odbc:mytest","","");
20              
21              ct=DriverManager.getConnection("jdbc:odbc:mytest");
22             //3.创建Statement或者PreparedStatement
23             //Statement的作用是发送SQL语句到服务器
24              sm=ct.createStatement();
25             
26             //执行SQL语句的操作
27             String sql="insert into emp values(2,'小强','霸王强','男',1500)";
28             //exectutUpdate语句可以执行(添加,删除,修改)这三种SQL语句
29             //exectutUpdate语句执行后会返回一个int类型的整数,执行失败返回0,执行成功返回添加的条数1.2.3...
30             int i=sm.executeUpdate(sql);
31             if (i==1) {
32                 System.out.println("数据添加成功");
33             }else {
34                 System.out.println("数据添加失败");
35             }
36         } catch (Exception e) {
37             // TODO: handle exception
38             e.printStackTrace();
39         }finally{
40             //关闭数据库连接用必须关闭数据库连接
41             //关闭的顺序是,谁后创建,则先关闭
42             //为了关闭数据库安全和保证程序的强壮,最好是做一个判断
43             try {
44                 //如果发送语句不等于空就执行关闭,换句话说就是,发送语句执行了连接,所以必须关闭,同理ct也是一样的
45                 if (sm!=null) {
46                     sm.close();
47                 }
48                 if (ct!=null) {
49                     ct.close();
50                 }
51                 
52             } catch (SQLException e) {
53                 // TODO Auto-generated catch block
54                 e.printStackTrace();
55             }
56         }
57     }
58 }

 使用JDBC-ODBC对数据库进行增删改查

 1 /**
 2  * 演示使用jdbc-odbc桥连方式操作数据库的方法
 3  * 1.在我的电脑控制面板-管理工具-数据源ODBC配制电脑与服务器的连接
 4  * 2.在程序中去连接数据库
 5  */
 6 package com.test4;
 7 import java.sql.*;
 8 public class Test1 {
 9     public static void main(String[] args) {
10         Connection ct=null;
11         Statement sm=null;
12         try {
13             //1.加载驱动(作用是把需要的驱动程序加入内存中)
14             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
15             //2.得到连接(指定连接到哪个数据源,用户名,密码)
16             //如果配制的时候选择的是windows nt验证则不需要用户名和密码
17             //Connection ct=DriverManager.getConnection("jdbc:odbc:myliuTest")
18             //因为我们选择的是用帐号和密码验证,所以需要用户名和密码
19              //ct=DriverManager.getConnection("jdbc:odbc:mytest","","");
20              
21              ct=DriverManager.getConnection("jdbc:odbc:mytest");
22             //3.创建Statement或者PreparedStatement
23             //Statement的作用是发送SQL语句到服务器
24              sm=ct.createStatement();
25             
26             //执行SQL语句的操作
27             String sql="insert into emp values(2,'小强','霸王强','男',1500)";
28             //exectutUpdate语句可以执行(添加,删除,修改)这三种SQL语句
29             //exectutUpdate语句执行后会返回一个int类型的整数,执行失败返回0,执行成功返回添加的条数1.2.3...
30             int i=sm.executeUpdate(sql);
31             if (i==1) {
32                 System.out.println("数据添加成功");
33             }else {
34                 System.out.println("数据添加失败");
35             }
36             //删除数据库里面的数据
37             String sqlDelete="delete from emp where name='小强'";
38             String sqlUpdate="update emp set name='小明' where name='小强'";
39             //修改数据库里面的数据
40             
41             //查询的方法,显示所有的信息
42             //ResultSet结果集,可以把这个ResultSet理解成一个表行的结果集,可以当成一个游标
43             ResultSet rs=sm.executeQuery("select * from emp");
44             //因为RS指向了结果集的第一行的前一行,我们就循环取出
45             while (rs.next()) {
46                 int deptno=rs.getInt(1);
47                 String dnameString=rs.getString(2);
48                 String locString=rs.getString(3);
49                 System.out.println(deptno+"  "+dnameString+"  "+locString);
50                 
51             }
52             //试图取出第一行的第一列 
53             //rs.getInt()取出的是整数,rs.getString();取出的是字符串类型
54             //rs.next();
55             //int a=rs.getInt(1);
56         } catch (Exception e) {
57             // TODO: handle exception
58             e.printStackTrace();
59         }finally{
60             //关闭数据库连接用必须关闭数据库连接
61             //关闭的顺序是,谁后创建,则先关闭
62             //为了关闭数据库安全和保证程序的强壮,最好是做一个判断
63             try {
64                 //如果发送语句不等于空就执行关闭,换句话说就是,发送语句执行了连接,所以必须关闭,同理ct也是一样的
65                 if (sm!=null) {
66                     sm.close();
67                 }
68                 if (ct!=null) {
69                     ct.close();
70                 }
71                 
72             } catch (SQLException e) {
73                 // TODO Auto-generated catch block
74                 e.printStackTrace();
75             }
76         }
77     }
78 }

SQL注入查询方法

1 select * from 表名 where 字段名='' or 1='1'
prepareStatement查询数据库数据的方法

 1 /**
 2  * 1.PreparedSatement可以提高执行效率(因为它有预编译的功能)
 3  * 2.PreparedSatement可以防止SQL注入,但是必须用问号赋值的方式才可以
 4  */
 5 package com.test4;
 6 import java.sql.*;
 7 public class Test02 {
 8     private void mian() {
 9         // TODO Auto-generated method stub
10         //定义需要的对象
11         Connection ct=null;
12         PreparedStatement ps=null;
13         ResultSet rs=null;
14         
15         try {
16             //加载驱动
17             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
18             //得到连接
19             ct=DriverManager.getConnection("数据库地址");
20             //创建ps,必须用?问号的方式用prepareStatement的方式做查询
21             ps=ct.prepareStatement("sql查询语句 where 字段=条件可以加上问号?");
22             //这是给数据库第一个?问号进行赋值查询的方法
23             ps.setInt(1, 20);
24             //这是给数据库第二个?问号进行赋值查询的方法
25             ps.setString(2, "小明");
26             rs=ps.executeQuery();
27             while (rs.next()) {
28                 System.out.println(rs.getInt(1)+" 整数型数据获得 "+rs.getString(2)+"字符串数据获得");
29                 
30                 
31             }
32             //添加记录的方法
33             ps=ct.prepareStatement("insert int emp values(?,?,?)");
34             //设置第一个问号的记录
35             ps.setInt(1, 1);
36             ps.setString(2, "小明");
37             ps.setString(3, "销售部");
38             int i=ps.executeUpdate();
39             if (i==1) {
40                 System.out.println("OK");
41             }else{
42                 System.out.println("error");
43             }
44         } catch (Exception e) {
45             // TODO: handle exception
46             e.printStackTrace();
47         }finally{
48             //关闭资源
49             //把需要关闭数据库的资源放在另外一个try里面做关闭
50             try {
51                 if (rs!=null) {
52                     rs.close();
53                 }
54                 if (ps!=null) {
55                     ps.close();
56                 }
57                 if (ct!=null) {
58                     ct.close();
59                     
60                 }
61             } catch (Exception e2) {
62                 // TODO: handle exception
63                 e2.printStackTrace();
64             }
65             
66         }
67     }
68 }

 


 以下是我成功的经验,首先得导入SQL直连的JAR包,安装SQL2008R2的数据库,就可以实现了对数据库数据的增删改查了

 1 /**
 2  * JDBC的方式操作数据库的方式
 3  */
 4 package com.test4;
 5 import java.sql.*;
 6 import java.sql.PreparedStatement;
 7 
 8 public class Test03 {
 9     public static void main(String[] args) {
10     //以后都用这个对数据的查询PreparedStatement
11         PreparedStatement ps=null;
12         Connection ct=null;
13         ResultSet rs=null;
14         try {
15             //初始化我们的对象
16             //加载驱动
17             //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
18             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
19             //得到连接
20             ct=DriverManager.getConnection("jdbc:sqlserver://XTB_01-PC:1433;DatabaseName=emp","sa","数据库密码");
21             //创建执行语句对象preparedstatement
22 //            ps=ct.prepareStatement("select * from dbo.Book");
23 //            //增删改就用executeupdate()如果是查询就用executeQuery();
24 //            rs=ps.executeQuery();
25 //            //循环取出数据
26 //            while (rs.next()) {
27 //                String userId=rs.getString(1);
28 //                String name=rs.getString(2);
29 //                int age=rs.getInt(3);
30 //                
31 //                System.out.println(userId+"  "+ name+""+age);
32 //            }
33             
34             //添加数据
35             ps=ct.prepareStatement("insert into Book values('2','小强',30)");
36             int i=ps.executeUpdate();
37             if (i==1) {
38                 System.out.println("OK");
39             }else {
40                 System.out.println("NO");
41             }
42         } catch (Exception e) {
43             // TODO: handle exception
44             e.printStackTrace();
45         }finally{
46             try {
47                 //关闭资源
48                 if (rs!=null) {
49                     rs.close();
50                 }
51                 if (ps!=null) {
52                     ps.close();
53                 }
54                 if (ct!=null) {
55                     ct.close();
56                 }
57             } catch (Exception e2) {
58                 // TODO: handle exception
59                 e2.printStackTrace();
60             }
61         }
62     }
63 }

 手动添加数据到面板中

 1 /**
 2  * 自定义加入数据到面板的方法
 3  */
 4 package com.test5;
 5 import javax.swing.*;
 6 import java.util.*;
 7 import java.sql.*;
 8 import java.awt.*;
 9 import java.awt.*;
10 public class Test01 extends JFrame {
11     //定义组件 rowData用来存放行数据,columnNames用来存放列名
12     Vector rowData,columnNames;
13     JTable jt=null;
14     JScrollPane jsp=null;
15     public static void main(String[] args) {
16         Test01 t=new Test01();
17     }
18     public Test01()
19     {
20         columnNames=new Vector();
21         //设置列名
22         columnNames.add("学号");
23         columnNames.add("名字");
24         columnNames.add("性别");
25         columnNames.add("年龄");
26         columnNames.add("籍贯");
27         columnNames.add("系别");
28         
29         rowData=new Vector();
30         //rowData可以存放多行
31         Vector hang=new Vector();
32         hang.add("sp001");
33         hang.add("小明");
34         hang.add("男");
35         hang.add("500");
36         hang.add("山东");
37         hang.add("小小明");
38         //把行数据放入到rowData
39         rowData.add(hang);
40         
41         //初始化JTable
42         jt=new JTable(rowData,columnNames);
43         
44         //初妈化jsp JScrollPane
45         jsp=new JScrollPane(jt);
46         
47         //把jsp放入到JFrame
48         this.add(jsp);
49         
50         this.setSize(400,300);
51         this.setTitle("test");
52         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
53         this.setVisible(true);
54         
55     }
56 }

从数据库添加数据到面板中

  1 /**
  2  * 从数据库取出数据到面板的方法
  3  */
  4 package com.test5;
  5 import javax.swing.*;
  6 import java.util.*;
  7 import java.sql.*;
  8 import java.awt.*;
  9 public class Test02 extends JFrame {
 10     //定义组件 rowData用来存放行数据,columnNames用来存放列名
 11     Vector rowData,columnNames;
 12     JTable jt=null;
 13     JScrollPane jsp=null;
 14     //定义操作数据库需要的变量
 15     PreparedStatement ps=null;
 16     Connection ct=null;
 17     ResultSet rs=null;
 18     public static void main(String[] args) {
 19         Test02 t=new Test02();
 20     }
 21     public Test02()
 22     {
 23         columnNames=new Vector();
 24         
 25     
 26         //设置列名
 27         columnNames.add("学号");
 28         columnNames.add("名字");
 29         columnNames.add("性别");
 30         columnNames.add("年龄");
 31         columnNames.add("籍贯");
 32         columnNames.add("系别");
 33         
 34         rowData=new Vector();
 35         //以下是取出数据库数据
 36         try {
 37             //加载连接数据库的方法
 38             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
 39             //连接数据库
 40             ct=DriverManager.getConnection("jdbc:sqlserver://XTB_01-PC:1433;DatabaseName=emp","sa","yjjeihc");
 41             //执行查询语句
 42             ps=ct.prepareStatement("select * from stu");
 43             //执行查询语句
 44             rs=ps.executeQuery();
 45             System.out.println(rs);
 46             
 47             while (rs.next()) {
 48                 //创建一个向量
 49                 Vector hang=new Vector();
 50                 
 51                 //把数据放入行中
 52                 hang.add(rs.getString(1));
 53                 hang.add(rs.getString(2));
 54                 hang.add(rs.getString(3));
 55                 hang.add(rs.getInt(4));
 56                 hang.add(rs.getString(5));
 57                 hang.add(rs.getString(6));
 58                 
 59                 
 60                 
 61                 //把向量里面取出来的数据放到rowData中
 62                 rowData.add(hang);
 63         
 64             }
 65         } catch (Exception e) {
 66             // TODO: handle exception
 67             e.printStackTrace();
 68         }finally{
 69             //关闭数据库
 70             try {
 71                 if (rs!=null) {
 72                     rs.close();
 73                 }
 74                 if (ps!=null) {
 75                     ps.close();
 76                 }
 77                 if (ct!=null) {
 78                     ct.close();
 79                 }
 80             } catch (Exception e2) {
 81                 // TODO: handle exception
 82                 e2.printStackTrace();
 83             }
 84         }
 85         
 86         //初始化JTable
 87         jt=new JTable(rowData,columnNames);
 88         
 89         //初妈化jsp JScrollPane
 90         jsp=new JScrollPane(jt);
 91         
 92         //把jsp放入到JFrame
 93         this.add(jsp);
 94         
 95         this.setSize(400,300);
 96         this.setTitle("test02");
 97         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 98         this.setVisible(true);
 99         
100     }
101 }

 

posted on 2020-09-15 10:11  当幸福莱敲门  阅读(136)  评论(0)    收藏  举报