8.11

好久没发博客了是时候来一发了

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;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值