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 }
浙公网安备 33010602011771号