在SQLite中检索表列名称
问题描述:
我尝试了所有已提供的解决方案,包括使用PRAGMA,但我似乎无法使其工作!我有一个程序,允许用户创建一个表名称并手动输入他们希望的列名。我需要一些如何从选定的表中获取列名。我需要通过“Private void loadDB”函数来做到这一点。正如你所看到的,我已经使用了很多方法来试图让它起作用,但它不会提取名称。在SQLite中检索表列名称
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
public class ViewTable extends JFrame {
private static final long serialVersionUID = 1L;
private static final String PREFERRED_LOOK_AND_FEEL = null;
private final String tableName;
private String[] columnNames;
private String[][] data;
private JTable tablePane;
public ViewTable(String tableName){
this.tableName=tableName;
initComponents();
loadDB();
displayTable();
setDefaultCloseOperation(CreateTemplate.EXIT_ON_CLOSE);
setSize(700,700);
setTitle("View Table");
setVisible(true);
}
private void initComponents() {
JPanel mainPanel = new JPanel(new BorderLayout());
this.add(mainPanel);
mainPanel.setBackground(Color.yellow);
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.setBackground(Color.blue);
mainPanel.add(topPanel,BorderLayout.NORTH);
JLabel titleLabel = new JLabel(this.tableName);
titleLabel.setBorder(new LineBorder(Color.black));
titleLabel.setFont(new Font("Helvetica", Font.BOLD, 24));
titleLabel.setForeground(Color.orange);
titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
topPanel.add(titleLabel,BorderLayout.CENTER);
JButton exitButton = new JButton("Finish");
exitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
close_window();
}
});
exitButton.setBorder(new EmptyBorder(new Insets(20,20,20,20)));
topPanel.add(exitButton,BorderLayout.EAST);
}
private void close_window(){ this.dispose(); }
private void loadDB(){
//String com = "SELECT sql from sqlite_master WHERE tbl_name = '"+tableName+"' AND type = 'table'";
//String com = "PRAGMA table_info("+tableName+");";
//String com = "INSERT null";
//SQLCommands.SQLCommand(com);
//String com = "SELECT * FROM sqlite_master";
//String[] output = SQLCommands.returnSQLCommand(com);
//String com = "SELECT * FROM (PRAGMA table_info("+tableName+");";
//String[] output = SQLCommands.returnSQLCommand(com);
//for (String S : output){ System.out.println(S); JOptionPane.showInputDialog("Enter template name"); }
//get column names
//columnNames = new String[3];
//columnNames[0] = "Name"; columnNames[1] = "Surname"; columnNames[2] = "Sex";
//use column names to populate data
//e.g. data[4][0] => "SELECT Name FROM tableName"[4]
}
private void displayTable(){
//use JTable
//new JScrollPane which uses the table
//put JScrollpane in CENTER box
}
public static void main(String[] args){
String [] tableNames = SQLCommands.returnSQLCommand("SELECT name FROM sqlite_master");
new ViewTable(tableNames[9]);
}
}
答
字符串COM = “PRAGMA table_info( ”+表名+“);”;
这是执行的正确命令。根据SQLite docs on PRAGMA:
PRAGMA table_info(table-name);
此编译指示为命名表中的每列返回一行。结果集中的列包括列名称,数据类型,列是否可以为NULL以及列的默认值。
当我通过JDBC使用SQLite尝试它,它似乎很好地工作:
JdbcDatabaseConnection compiled statement: PRAGMA table_info(foo)
[0, id, INTEGER, 0, null, 1]
[1, stuff, VARCHAR, 0, null, 0]
[2, val, INTEGER, 0, null, 0]
这表明foo
表有3列:
- 0:名 'ID',类型'INTEGER',可以为空'0'(假设我猜),默认值'null'
- 1:name'stuff',type'VARCHAR',can-null-null'0'(false我猜),默认值'null'
- 2:名称 'VAL', 'integer' 类型,可以-是空的 '0'(假我猜),默认值为 '空'
我不知道最后一列是什么但id
是一个自动生成的字段,所以它可能是。
+0
我认为,最后一列对应主键状态 – 2015-04-05 08:15:35
我强烈建议在PC上使用SQLite CLI(命令行界面)来玩耍。 – 2012-04-05 10:09:32