未在数据库表中顺序插入字符串?

问题描述 投票:0回答:3

我正在尝试插入10个格式为"typename_" + i的值,其中i是名为roomtype的表的循环计数器,该表的属性为typename(SQL类型字符可变的主键(45))和samplephoto(它可以为NULL,我暂时不处理此问题。在我看来,奇怪的是,元组的插入顺序与循环计数器的递增顺序不同。那是:

typename_1
typename_10
typename_2
typename_3
...

我想这不是很重要,但是我不明白为什么会这样。我正在使用PostgreSQL 9.3.4,pgAdmin III版本1.18.1和Eclipse Kepler。

创建连接(使用JDBC驱动程序)并进行查询的Java代码是:

import java.sql.*;
import java.util.Random;

public class DBC{
    Connection _conn;

    public DBC() throws Exception{


        try{
            Class.forName("org.postgresql.Driver");
        }catch(java.lang.ClassNotFoundException e){
            java.lang.System.err.print("ClassNotFoundException: Postgres Server JDBC");
            java.lang.System.err.println(e.getMessage());
            throw new Exception("No JDBC Driver found in Server");
        }

        try{

            _conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/hotelreservation","user", "0000");
            ZipfGenerator p = new ZipfGenerator(new Random(System.currentTimeMillis()));
            _conn.setCatalog("jdbcTest");
            Statement statement = _conn.createStatement();
            String query;

            for(int i = 1; i <= 10; i++){
                String roomtype_typename = "typename_" + i;
                query = "INSERT INTO roomtype VALUES ('" + roomtype_typename + "','" + "NULL" +"')";
                System.out.println(i);
                statement.execute(query);
            }


        }catch(SQLException E){
            java.lang.System.out.println("SQLException: " + E.getMessage());
            java.lang.System.out.println("SQLState: " + E.getSQLState());
            java.lang.System.out.println("VendorError: " + E.getErrorCode());
            throw E;
        }

    }

}

但是我在pgAdmin表中得到的是:

“

sql postgresql jdbc insertion pgadmin
3个回答
1
投票

这是一种误解。关系数据库表中没有“自然”顺序。通常,通常将行按顺序插入到保存表的物理文件中,但是各种各样的活动可以重新排列物理顺序。除了基本(非并行)顺序扫描外,查询所做的任何事情都可能以任何适当的顺序返回行。这是根据标准SQL进行的。


1
投票

我猜想,输出是通过字母排序的...如果您通过typename_9创建typename_1,则一切正常。您还可以使用typename_01(用零填充)来获取正确的顺序。


1
投票

您没有看到PostgreSQL存储数据的顺序,而是pgadmin显示数据的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.