有没有一种简单的方法可以从Linux命令行运行MySQL查询并以CSV格式输出结果?
这就是我现在正在做的事情:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Run Code Online (Sandbox Code Playgroud)
当有很多列需要用引号括起来,或者结果中有引号需要转义时,它会变得混乱.
我有一个bash shell脚本循环遍历某个目录的所有子目录(但不是文件).问题是某些目录名称包含空格.
以下是我的测试目录的内容:
$ls -F test
Baltimore/ Cherry Hill/ Edison/ New York City/ Philadelphia/ cities.txt
Run Code Online (Sandbox Code Playgroud)
以及遍历目录的代码:
for f in `find test/* -type d`; do
echo $f
done
Run Code Online (Sandbox Code Playgroud)
这是输出:
test/Baltimore test/Cherry Hill test/Edison test/New York City test/Philadelphia
Cherry Hill和纽约市被视为2或3个单独的条目.
我尝试引用文件名,如下所示:
for f in `find test/* -type d | sed -e 's/^/\"/' | sed -e 's/$/\"/'`; do
echo $f
done
Run Code Online (Sandbox Code Playgroud)
但无济于事.
必须有一个简单的方法来做到这一点.
以下答案很棒.但为了使这更复杂 - 我并不总是想使用我的测试目录中列出的目录.有时我想将目录名称作为命令行参数传递.
我接受了查尔斯关于设置IFS的建议,并提出了以下建议:
dirlist="${@}"
(
[[ -z "$dirlist" ]] && dirlist=`find test -mindepth 1 -type d` && IFS=$'\n'
for …
Run Code Online (Sandbox Code Playgroud) 我有一个从a获取对象的类,BlockingQueue
并通过take()
在连续循环中调用来处理它们.在某些时候,我知道不会有更多的对象被添加到队列中.如何中断该take()
方法以阻止其阻塞?
这是处理对象的类:
public class MyObjHandler implements Runnable {
private final BlockingQueue<MyObj> queue;
public class MyObjHandler(BlockingQueue queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
MyObj obj = queue.take();
// process obj here
// ...
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用此类处理对象的方法:
public void testHandler() {
BlockingQueue<MyObj> queue = new ArrayBlockingQueue<MyObj>(100);
MyObjectHandler handler = new MyObjectHandler(queue);
new Thread(handler).start();
// get objects for handler to process …
Run Code Online (Sandbox Code Playgroud) 我可以从DOS提示符下成功连接到MySQL,但是当我尝试从cygwin连接时,它只是挂起.
$/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.1/bin/mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
怎么了?
我最近从Linux开发转向Windows开发.和我一样多的Linux爱好者,我不得不说 - C#是一种美丽的语言,Visual Studio非常棒,现在我已经给自己买了一个轨迹球,我的手腕已经不再使用鼠标了.
但有一件事我无法过去:成本.Windows 7,Visual Studio,SQL Server,Expression Blend,ViEmu,Telerik,MSDN - 我们为项目的每个开发人员讲了数千个!你肯定会得到一些钱 - 我的问题是,它值得吗?[并非每个开发人员都需要上述所有工具 - 但您是否听说过任何人在没有Visual Studio的情况下编写C#代码?我已经在Linux上从事过相当大的软件项目而无需为任何开发工具付费.
很明显,如果你已经是一个Windows商店,那么重新培训你所有的开发者都没有用.如果您正在寻找开发Windows桌面应用程序,那么您无法在Linux中执行此操作.但是,如果您正在开始一个新的Web应用程序项目,并且可以雇用您想要的任何语言专家的开发人员,您是否仍会选择Windows作为您的开发平台,尽管成本高昂?如果是,为什么?
更新:我不打算开始任何争论.我从答案/评论中获得了一些有价值的见解:
我正在修改使用以下内容执行查询的其他人的代码:
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
Run Code Online (Sandbox Code Playgroud)
如何判断DataSet是否为空(即没有返回结果)?
我有一个第三方jar文件,它只是部分API的javadocs.有没有办法对jar文件进行反向工程以获得类和方法的完整列表?
考虑一下代码:
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.createStatement(myQueryString);
rs = ps.executeQuery();
// process the results...
} catch (java.sql.SQLException e) {
log.error("an error!", e);
throw new MyAppException("I'm sorry. Your query did not work.");
} finally {
ps.close();
rs.close();
}
Run Code Online (Sandbox Code Playgroud)
上面没有编译,因为都PreparedStatement.close()
和ResultSet.close()
抛出java.sql.SQLException
.那么我要在finally子句中添加一个try/catch块吗?或者将close语句移动到try子句中?或者只是不打扰打电话?
考虑以下课程:
public class Code : IEquatable<Code>
{
public string Value { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as Code);
}
public override bool Equals(Code code)
{
if (code == null) return false;
return this.Value == code.Value;
}
public static bool operator ==(Code a, Code b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool operator !=(Code a, Code b)
{
if (a == null) return b!= null;
return !a.Equals(b); …
Run Code Online (Sandbox Code Playgroud) 我使用的是FtpWebResponse类,但没有看到Dispose方法. 事实证明,该类实现了IDisposable,但是明确地这样做,因此在调用Dispose之前必须先将实例强制转换为IDisposable:
// response is an instance of FtpWebResposne
((IDisposable) response).Dispose();
Run Code Online (Sandbox Code Playgroud)
为什么像这样的类的设计者会选择明确地实现IDisposable?正如Anthony Pegram所说,以这种方式做事掩盖了这样一个事实,即对象应该为每次使用课程时都没有查阅文档的普通开发人员处理.