将Processing与SQL数据库连接并获取列名

问题描述

我已使用数据库库“ de.Bezier.data.sql”连接了Processing和sql。 我不知道如何获取特定表中的列名。 我得到了正确的数据库名称,但是由于列“ Tables_in_sql7363100”的名称而得到以下内容

import de.bezier.data.sql.*;

MysqL sql;
String[] tableNames;
String[] columnNames;

void setup() {
  size(300,300);
  database_connection();

  if (connect) {
    tableNames = sql.getTableNames();
    for (int i=0; i<tableNames.length; i++) {
      println(tableNames[i]);
    }
 
    columnNames = sql.getColumnNames();
    for (int i=0; i<ColumnNames.length; i++) {
      println(columnNames[i]);
    }
  }
}

void draw() {
  background(255);
}



void database_connection() {
  sql = new MysqL(this,"ServerName","DataBase","DUN","PW");
  if (sql.connect()) {
    connect = true;
    connect_status = "Conected";
  } else {
    connect = false;
    connect_status = "Connection Failed";
  }
}

解决方法

我所看到的有2个问题。您感兴趣的第一个是您没有选择任何表。这就是为什么您没有列列表的原因。您可以使用简单的查询来解决此问题:

sql.query("SELECT * FROM myTable");

但这不是唯一的事情:您没有考虑滞后。它现在可以在本地数据库上运行,因为时滞确实很低,但这无法通过Internet传输。这是一个示例,其中显示公共测试数据库中的列以及从查询中获取结果需要多长时间:

import de.bezier.data.sql.*;

MySQL sql;
String user = "rfamro";
String pass = "";
String server = "mysql-rfam-public.ebi.ac.uk:4497";
String database = "Rfam";

String[] columnNames;

void setup() {
  size(300,300);
  sql = new MySQL(this,server,database,user,pass);
}

void draw() {
  if (columnNames != null) {
    println("It took " + millis() + "ms to get this data back.");
    for (String s : columnNames) {
      println(s);
    }
    noLoop();
  } else if (sql.connect()) {
    sql.query("SELECT * FROM family");
    sql.next();  // only use .next when you know you have data
    columnNames = sql.getColumnNames();
  }
}

从这里开始,需要2到7秒的时间才能取回数据。您将了解,setup()方法运行大约需要几毫秒,到那时您将没有任何结果。

希望这会有所帮助。玩得开心!