Caso: Java inserta datos falsos en tiempo real para realizar la actualización incremental simulada de la tabla de hechos del pedido
Paso 1: Cree una tabla de hechos de pedidos en la base de datos de Oracle
--创建订单事实表
create table test.test_order (
o_id varchar(20) primary key,
dt timestamp,
u_id number,
p_id varchar(20),
quantity number,
pay_id varchar(20)
);
comment on table test.test_order is '订单事实表';
comment on column test.test_order.o_id is '订单ID';
comment on column test.test_order.dt is '订单创建时间';
comment on column test.test_order.u_id is '用户ID';
comment on column test.test_order.p_id is '产品ID';
comment on column test.test_order.quantity is '购买数量';
comment on column test.test_order.pay_id is '支付方式';
Paso 2: escribir código Java y ejecutar
package java_to_oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
public class JavaToOracle {
//静态变量存储最大值
private static final AtomicInteger atomicNum = new AtomicInteger();
//构造方法
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@192.168.xxx.x:1521:填你oralce数据库的实例名称";
String username = "???";
String password = "???";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, username, password);
Statement st = con.createStatement();
String sql_0 = "truncate table test.TEST_ORDER";
st.execute(sql_0);
System.out.println(getCurrentTime() +" 清空表成功: " + sql_0);
//插入 100000 条消息,大概持续3天
for (int i = 0; i < 100000; i++) {
//线程安全的原子操作,所以此方法无需同步
int newNum = atomicNum.incrementAndGet();
//生成:订单ID
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//订单ID的年月日
String newStrNum = String.format("%06d", newNum);//订单ID的尾部编号,数字长度为5位,长度不够数字前面补0
String orderID = "JD" + df.format(new Date()) + newStrNum;
//定义sql语句
String sql_1 = "insert into test.test_order values " + "(" + "'" + orderID + "'" + "," + "SYSTIMESTAMP" + "," + getUserID() + "," + "'" + getProductID() + "'" + "," + getPurchaseQuantity() + "," + "'" + getPaymentMode() + "'" + ")";
//执行sql
st.execute(sql_1);
//打印提示
System.out.println(getCurrentTime() + " 插入第 " + newStrNum + " 条数据: " + sql_1);
//随机睡眠
Thread.sleep(getSleepTime());
}
System.out.println("insert success!");
}
catch (Exception e) {
System.out.println("insert failed! " + e);
}
}
//----------------------------------------------------------
//生成:订单创建时间
public static String getCurrentTime() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(new Date());
}
//生成:用户ID
public static Integer getUserID() {
Integer[] uid = {14000001,14000002,14000003,14000004,14000005,14000006,14000007,14000008,14000009,14000010};
Random random = new Random();
int i = random.nextInt(uid.length);
return uid[i];
}
//生成:产品ID
public static String getProductID() {
String[] pid = {"A3701","A3702","A3703","A3704","A3705","A3706","A3707","A3708","A3709","A3710"};
Random random = new Random();
int i = random.nextInt(pid.length);
return pid[i];
}
//生成:购买数量[1,10)取整
public static Integer getPurchaseQuantity() {
return (int) (Math.random() * (10-1) + 1);
}
//生成:支付ID
public static String getPaymentMode() {
String[] paymode = {"A","B","C"};
Random random = new Random();
int i = random.nextInt(paymode.length);
return paymode[i];
}
//生成:睡眠时间[100,5000)取整 Math.random()*(max-min)+min
public static Integer getSleepTime() {
return (int) (Math.random() * (5000-100) + 100);
}
}
Paso 3: Ver los datos de la tabla, ¡los datos se insertaron correctamente!
select * from ogg.test_order
Problemas que puede encontrar:
Nota 1: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver |
Error 2: java.sql.SQLSyntaxErrorException: ORA-00917: falta una coma |
Solución: imprima la cadena sql y verifique si hay algún problema con el empalme de la cadena java |
Error 3: java.sql.SQLException: ORA-00911: carácter no válido |
Solución: no puede haber un punto y coma al final de la instrucción sql |