月份:2018年1月


PostgreSQL表修改


-- 修改表字段类型
alter table '表名' alter  COLUMN '字段名' type '要修改的字段类型' ;
-- 添加表字段
ALTER TABLE '表名' ADD '字段名' '要修改的字段类型';
-- 删除表字段
ALTER TABLE '表名' DROP '字段名'; 
-- 表的重命名
ALTER TABLE '表名' RENAME TO '新表名';
-- 更改列的名字
ALTER TABLE '表名' RENAME '字段名' to '新字段名';

PostgreSQL创建只读账号


-- 回收创建表的权限
 revoke create on schema public from public;
-- 创建账号
create user readonly with encrypted password 'pwd';
alter user readonly set default_transaction_read_only=on;
-- 给只读账号连接数据的权限
grant connect on database 数据库名 to readonly;
-- 在指定数据库下执行
grant usage on schema 可配置多个schema to readonly;
grant select on all sequences in schema public to readonly;
grant select on all tables in schema public to readonly;
-- 新建的表也要给只读账号权限
alter default privileges in schema public grant select on tables to readonly;
说明:只做记录备用,未测试;
     该命令存在缺陷,如一个库存在多个schema需一一赋予权限,可能并非是最好的处理方式

PostgreSQL物化视图


-- 物化视图用于固定查询的结果
-- 需要定期更新,相当于重新执行查询命令
-- 主要用于替代查询时间过长且数据不会发生很大变化的情况
-- 创建语法:
 CREATE MATERIALIZED VIEW '视图名称' AS '查询命令';
-- 更新语法:
 REFRESH MATERIALIZED VIEW '视图名称'

Postgresql中COALESCE函数的使用


SELECT COALESCE(str1,str2,str3,...)
-- 如果str1为null,则取str2;如果str2为空,则取str3;...

Java程序实现进度条打印


//方法一(缺陷:在开发环境下可能显示模式是Unicode,然后\b就变成了个框框):
public static void main(String[] args) throws Exception {
    System.out.print("Progress:");
    for (int i = 1; i <= 100; i++) {
        System.out.print(i + "%");
        Thread.sleep(100);

        for (int j = 0; j <= String.valueOf(i).length(); j++) {
            System.out.print("\b");
        }
    }
    System.out.println("结束");
}
//方法二:
public static void main(String[] args) throws Exception {
    for (int i = 1; i <= 100; i++) {
	System.out.print('\r' + "Progress:" + i + "%");
	Thread.sleep(100);
    }
    System.out.println("结束");
}
知识点:
1.\b可在控制台删除一个字节的打印记录
2.\r可在控制台删除整行的打印记录

使用正则过滤掉字符串中换行符


private String replaceBlank(String str) {
		String dest = "";
		if (str != null) {
			Pattern pattern = Pattern.compile("\\s*|\t|\r|\n");
			Matcher matcher = pattern.matcher(str);
			dest = matcher.replaceAll("");
		}
		return dest;
	}

PostgreSQL查询数据库的连接信息


select * from pg_stat_activity;
-- pg_stat_activity为系统视图
-- 可根据where限定数据库名,连接ip,表名等字段查询相关信息
query_start:active状态的查询开始时间,如果状态不是active的,那么就是最后一次查询开始的时间

state:运行状态,可以为几种值。
active:正在执行查询;
idle:等待新的命令;
idle in transaction:后端是一个事务,但是尚未执行查询;
idle in transaction(aborted):和idle in transaction类似,除了事务执行出错。

query:执行的查询文本(即SQL)。
如果状态是active,那么就是正在执行的SQL;
如果是其他状态,则展示最后一次执行的SQL。

所以可以用:
select count(*) from pg_stat_activity where state='idle';
查询闲置连接数。如果数字过大,可以认为是有问题的(如连接忘记关闭)。
如果想进一步定位到有问题的SQL,可以如下查询:
select query,count(*) as num from pg_stat_activity where state='idle' group by query order by num desc;
杀掉进程
SELECT pg_terminate_backend(PID);
这种可以kill掉各种操作(select、update、delete、drop等)操作

MySQL字符串拼接


--实例为拼接date+time

--方法一(concat(s1,s2,...))

concat(DATE_FORMAT($date,'%Y-%m-%d'),' ',$time)

--方法二(concat_ws(分割符,s1,s2,...))

CONCAT_ws(' ',DATE_FORMAT($date,'%Y-%m-%d'),$time)


Java实现页面(一)


package checkmod;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Checkmod extends JFrame implements ActionListener {

private JPanel jp=new JPanel();
private JCheckBox[] jcba={new JCheckBox("豫菜"),new JCheckBox("川菜"),new JCheckBox("粤菜"),new JCheckBox("西餐"),new JCheckBox("其他")};
private JRadioButton[] jrba={new JRadioButton("5~15岁"),new JRadioButton("16~35岁"),new JRadioButton("26~35岁"),new JRadioButton("36~45岁"),new JRadioButton("36~45岁"),new JRadioButton("46~55岁")};
private JButton[] jba={new JButton("确定"),new JButton("取消")};
private JLabel[] jla={new JLabel("年龄段:"),new JLabel("爱好:"),new JLabel("调查结果:")};
private JTextField jtf=new JTextField();
private ButtonGroup bg=new ButtonGroup();
public Checkmod(){
jp.setLayout(null);
for(int i=0;i&lt;5;i++){
jrba[i].setBounds(40+i*100,40,80,30);
jcba[i].setBounds(40+i*120,100,120,30);
jp.add(jrba[i]);jp.add(jcba[i]);
jrba[i].addActionListener(this);
jcba[i].addActionListener(this);
bg.add(jrba[i]);
if(i&gt;1)
continue;
jla[i].setBounds(20, 20+i*50, 80, 30);
jba[i].setBounds(400+i*120, 200, 80,26);
jp.add(jla[i]);jp.add(jba[i]);
jba[i].addActionListener(this);
}
jla[2].setBounds(20, 150, 120, 30);jp.add(jla[2]);
jtf.setBounds(120, 150, 500, 26);jp.add(jtf);
jtf.setEditable(false);
this.add(jp);this.setTitle("食物调查表");
this.setBounds(100, 100, 700, 280);
this.setVisible(true);this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


public static void main(String[] args) {
// TODO Auto-generated method stub
new Checkmod();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jba[1]){
for(int i=0;i&lt;jcba.length;i++){
jcba[i].setSelected(false);
jtf.setText("");
}
}else{
StringBuffer temp1=new StringBuffer("你是一个");
StringBuffer temp2=new StringBuffer();
for(int i=0;i&lt;5;i++){
if(jrba[i].isSelected()){
temp1.append(jrba[i].getText());
}
if(jcba[i].isSelected()){
temp2.append(jcba[i].getText()+".");
}
}
if(temp2.length()==0){
jtf.setText("爱好为空???");
}else{
temp1.append("的人,比较喜欢");
temp1.append(temp2.substring(0, temp2.length()-1));
jtf.setText(temp1.append("。").toString());
}
}
}

}

来源连接:https://jingyan.baidu.com/article/f79b7cb319780c9144023ec1.html