好久没发博客了是时候来一发了
1.HashMap小回顾
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMap2 {
public static void main(String[] args) {
Map<String,String> map= new HashMap<>();
map.put("01", "李同学");
map.put("02", "王同学");
Set <String> set=map.keySet();
Iterator <String> it=set.iterator();
System.out.println("key中集合元素:");
while(it.hasNext()){
System.out.println(it.next());
}
Collection <String> coll=map.values();
it=coll.iterator();
System.out.println("values集合中的元素:");
while(it.hasNext()){
System.out.println(it.next());
}
}
}
2.数据库
1.sql语句大全
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
— 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb ‘old_name’, ‘new_name’
二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in ‘”&Server.MapPath(“.”)&”\data.mdb” &”’ where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …..
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff(‘minute’,f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
具体实现:
关于数据库分页:
declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
exec sp_executesql @sql
注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
alter table tablename
–添加一个自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,…)
alter table tablename drop column column_b
20、说明:列出数据库里所有的表名
select name from sysobjects where type=’U’ // U代表用户
21、说明:列出表里的所有的列名
select name from syscolumns where id=object_id(‘TableName’)
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when ‘A’ then pcs else 0 end),sum(case vender when ‘C’ then pcs else 0 end),sum(case vender when ‘B’ then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
2.用java连接数据库
这里通过代码来说明
//连接数据库的驱动
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名
String url = "jdbc:mysql://localhost:3306/calzz";
//MYSQL的用户名
String user = "root";
//MySQL的密码
String password = "111111";
try {
Class.forName(driver);//加载驱动
Connection connection = DriverManager.getConnection(url,user,password);//连接数据库
1.用eclipse对数据库实现增删改查操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MySql {
public static void main(String[] args) {
//连接数据库的驱动
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名
String url = "jdbc:mysql://localhost:3306/calzz";
//MYSQL的用户名
String user = "root";
//MySQL的密码
String password = "111111";
try {
Class.forName(driver);//加载驱动
Connection connection = DriverManager.getConnection(url,user,password);//连接数据库
if(!connection.isClosed()){
//数据库操作类
Statement statement = connection.createStatement();
String sql;
//执行语句
//增
// sql = "insert into student (name,age,sex) values('李四',23,1)";
// statement.execute(sql);
// //删
// sql = "delete from student where name = '张三'";
// statement.execute(sql);
//改
// sql = "update student set age = 23,sex = 0 where name ='李四'";
// statement.execute(sql);
//查 使用其他方法
sql = "select name,age,sex from student where age>10";
// statement.execute(sql);
ResultSet resultSet = statement.executeQuery(sql);
resultSet.first();//先把游标移到第一位
while(!resultSet.isAfterLast()){//判断是否移到最后
String name = resultSet.getString("age");
System.out.println(name);
resultSet.next();
}
statement.close();
connection.close();
}else{
System.out.println("请打开数据库连接");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.用数据库写的一个注册,登录界面程序
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class RegisterView extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RegisterView frame = new RegisterView();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public RegisterView() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JTextArea textAreaUser = new JTextArea();
textAreaUser.setBounds(182, 50, 123, 24);
contentPane.add(textAreaUser);
JLabel label = new JLabel("\u7528\u6237\u540D");
label.setBounds(97, 54, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("\u5BC6\u7801");
label_1.setBounds(97, 88, 54, 15);
contentPane.add(label_1);
JTextArea textAreaPassword = new JTextArea();
textAreaPassword.setBounds(182, 84, 123, 24);
contentPane.add(textAreaPassword);
JButton buttonRegister = new JButton("注册");
buttonRegister.setBounds(195, 148, 93, 23);
contentPane.add(buttonRegister);
buttonRegister.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String user_name = textAreaUser.getText();
//test:1正则表达式 2确认密码
Pattern pUser = Pattern.compile("([a-z]|[A-Z]|[0-9]|[\\u4e00-\\u9fa5])+");//匹配中文字符的正则表达式: [\u4e00-\u9fa5]
Matcher matcherUser = pUser.matcher(user_name);
boolean isUserName = matcherUser.matches();
if(!isUserName){
textAreaUser.setText("用户名错误");
}
System.out.println(isUserName);
String password = textAreaPassword.getText();
SQLManager manager = SQLManager.newInstance();
Statement statment = manager.getStatement();
//获取数据库中用户名的个数
String count = "select * from user where user_name='"+user_name+"'";
try {
ResultSet set = statment.executeQuery(count);
//把游标移动到最后
set.last();
int num = set.getRow(); //获取游标位置
System.out.println(num);
//判断用户名是否存在
if(num>0&isUserName){
System.out.println("该用户已存在");
}else{
String register = "insert into user(user_name,password) values('"+user_name+"',"+password+")";
statment.execute(register);
System.out.println("注册成功");
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
}
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.ActionEvent;
public class SignView extends JFrame {
private JPanel contentPane;
private JTextField textFieldUserName;
private JTextField textFieldPassword;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SignView frame = new SignView();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public SignView() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textFieldUserName = new JTextField();
textFieldUserName.setBounds(134, 45, 144, 35);
contentPane.add(textFieldUserName);
textFieldUserName.setColumns(10);
textFieldPassword = new JTextField();
textFieldPassword.setBounds(134, 109, 144, 35);
contentPane.add(textFieldPassword);
textFieldPassword.setColumns(10);
JButton btnSignIn = new JButton("登陆");
btnSignIn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String user_name = textFieldUserName.getText();
//test:1正则表达式 2确认密码
String password = textFieldPassword.getText();
SQLManager manager = SQLManager.newInstance();
Statement statment = manager.getStatement();
//获取数据库中用户名的个数
String count = "select * from user where user_name='"+user_name+"' and password="+password;
try {
ResultSet set = statment.executeQuery(count);
//把游标移动到最后
set.last();
int num = set.getRow(); //获取游标位置
System.out.println(num);//num==1说明账号密码正确
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
btnSignIn.setBounds(134, 168, 144, 35);
contentPane.add(btnSignIn);
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class MySqlMannager {
private static MySqlMannager mannager;
private Statement statement;
private Connection connection;
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
public Statement getStatement() {
return statement;
}
public static synchronized MySqlMannager newInstance(){
if(mannager==null){
mannager=new MySqlMannager();
}
return mannager;
}
public void setStatement(Statement statement) {
this.statement = statement;
}
private MySqlMannager(){
String driver="com.mysql.jdbc.Driver";//连接数据库的驱动
String url="jdbc:mysql://localhost:3306/clazz";//URL指向要访问的数据库名
String user="root"; //MYSQL的用户名
String password="111111";//MySQL密码
try {
Class.forName(driver);//加载驱动
connection = DriverManager.getConnection(url, user, password);// 连接数据库
// statement = connection.createStatement();
// String create = "CREATE TABLE USER(id int(11) not null PRIMARY KEY auto_increment,user_name varchar(30) not null,password varchar(30) not null)";
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 加载驱动
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.Servlet
主要注意文字格式的转码,否则会乱码
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyTestServerlet
*/
@WebServlet("/MyTestServlet")
public class MyTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyTestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// System.out.println(request.getParameter("username"));
String userName=request.getParameter("username");
String passWord=request.getParameter("password");
userName=Ecoding.doEncoding(userName);
System.out.println(""+userName+":"+passWord);
String s="得到的用户名为"+userName+":"+passWord;
response.setHeader("Content-type", "text/html;charset=UTF-8");
//让浏览器以UTF-8格式解析
response.getWriter().append(s);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
import java.io.UnsupportedEncodingException;
public class Ecoding {
public static String doEncoding(String string){
try {
byte[] array = string.getBytes("ISO-8859-1");
string=new String(array, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return string;
}
}
404

被折叠的 条评论
为什么被折叠?



